Bisher stand bei jedem 409 „Der Zeitraum ist inzwischen belegt.“, auch wenn der Rechnungsauftrag fehlte (zustimmung_fehlt) oder sich der Stand geändert hatte (status_ungueltig). Jetzt nur bei zeitraum_belegt; sonst der Text aus buchungen-fehler.js. Aufgefallen beim ersten Test mit Donau Home.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Neuer Haken "Preis hängt von der Personenzahl ab" im Preis-Editor (nur bei Höchstzahl ab 2 Personen). Angeschaltet zeigt jede Staffel k Euro-Felder (1 Person bis k Personen, k = min(Höchstzahl, 10)) statt eines Preises; "Personen im Preis inklusive" und "Aufpreis je weiterer Person" sind dann ausgeblendet, ihre Werte gehen unverändert mit. Speichern sendet personenCent und preisProNachtCent = personenCent[0]. Beim Laden ist der Haken an, wenn personenCent gespeichert sind. Kundenansicht (nur lesen) sperrt Haken und Felder. Felder brechen auf dem Handy um. Tests im Fake-DOM.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Entwurf umbenannt (zeiten-datenschutz-6e-entwurf.md), Leistungsbeschreibung, Kanzlei-Fragen,
Livegang-Notiz und Test-Pins ziehen mit. N13: Rückgabe-Marker nach dem Löschen fehlt (vor on).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zusammenführung von TP2-Abschluss und Webshop (origin/main cab9c33) mit Öffnungszeiten live. Beide
Funktionen bleiben vollständig: jeder Konflikt ist als Vereinigung gelöst, Reihenfolge der Funktionsschlüssel
überall news, termine, shop, zeiten.
Konfliktdateien (28): public/app.js, dashboard.html, funktionen.js, widerrufen.html; scripts/stripe-products.mjs;
server/config.js, index.js, middleware/kundenansichtGuard.js, routes/abo.js, routes/admin/funktionenAdmin.js,
routes/funktionen.js, services/customerAdmin.js, customerViewLog.js, featureRegistry.js, retention.js,
siteFeatures.js, stripeBilling.js; test/customerViewLog, featureFreischaltung, featureRegistry, funktionenRoutes,
funktionenTermine, kundenansichtGuard, mailTemplates, publicForms, siteFeatures, stripeProductsScript (je
.test.js) und test/support/schema.js.
Entscheidungen: Mailvorlagen G01–G15, K01–K30, T01–T21 lückenlos (K24–K26 Webshop, K27–K30 Öffnungszeiten);
Stripe-Katalog mit shopSetup und zeitenSetup; Widerruf kennt shop und zeiten; ABO_FUNKTIONEN bleibt analyse
und termine (kein zeiten); activate() schreibt die Zeiten-Felder nur über extra; kein Halter von
feature-activate:<id> ruft disable() auf; die Aufbewahrungs-Löschung löscht Zeiten-Daten vor dem Abschalten und
hält den Kunden bei einem Fehler (held); die Admin-Antwort trägt ersatzTicket und warnung; Hash-Routen webshop
und zeiten, Ansichten view-webshop und view-zeiten; assertOwnProject behält die Meldung von main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
K24–K26 sind seit dem Webshop-Livegang (main) vergeben; der Mail-Lader sucht die Vorlage über den
Dateianfang, doppelte Nummern hätten die falsche Mail geschickt. Das Feld ist noch nicht in der
Produktion angelegt (zeiten-setup.mjs lief noch nicht), daher jetzt ein sprechender Name.
Spec und Plan behalten die alten Nummern (Hinweis oben im Dokument).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AVV, Leistungsbeschreibung, Datenschutzerklärung (6d), Datenschutz-Absatz und Kanzlei-Paket an das Verhalten
angepasst; HTML und PDF neu erzeugt (Fassung 2026-10-05 unverändert, nie ausgeliefert).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
schliesseAb und verwirf entfernen ipHash aus dem Bestell-JSON, sobald die Bestellung nicht mehr offen ist
(Begrenzung offener Bestellungen je IP bleibt). customer_details.phone wird nicht mehr in kaeufer.telefon
übernommen; Kundenansicht und Bestelldetail geben auch in alten Datensätzen keine Telefonnummer aus.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AVV (Vorbemerkung Abs. 2, Nr. 2, 3, 8, 9, Anlage), Leistungsbeschreibung (Nr. 2, 5, 6, 10),
Datenschutzerklaerung Abschnitt 6d, Datenschutz-Absatz fuer Haendler und Kanzlei-Paket (F12, F14, F16, F18, F19,
Fundstellen) beschreiben jetzt genau, was gebaut ist: jede bestaetigte Fassung der Rechtstexte liegt im Archiv und wird
mit den Shop-Daten geloescht, G09 zeigt die archivierte Fassung zum Hash der Bestellung; Eingangsmail G15 bei SEPA; die
Stripe-Kasse fragt keine Telefonnummer ab; die Bestellung speichert einen gesalzenen IP-Hash (Missbrauchsschutz,
Pseudonym), der bei Loeschung oder Anonymisierung entfaellt; Freischaltung durch das Team nur mit Zustimmung in Textform
samt Nachweis. Fassung 2026-10-05 bleibt, HTML und PDFs neu erzeugt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>