"Gültig bis" ist nur die Frist zum Annehmen. Jetzt steht auch das
Rabattende da:
- Formular "Neues Angebot", Kunde ohne Abo: Schätzung "Rabatt läuft
N Monate ab Abschluss und endet voraussichtlich zwischen <heute + N>
und <gültig bis + N>", mit Hinweis auf den späteren Start nach der
Widerrufsfrist (gut 2 Wochen)
- Formular, laufendes Abo: genaues Ende aus den nächsten Abbuchungen
(Anker = Leistungsbeginn, Monatsende wie bei Stripe), auch in der
Erfolgsmeldung
- Angebotsliste: offen -> Schätzung, aktiv -> "Rabatt endet am ..."
aus dem Abo-Dokument (bzw. "endete", "endet mit dem Abo am ...",
"unbekannt (Abo nicht gefunden)")
Rechnung in server/services/offerDiscount.js: Der Coupon deckt die
N Abbuchungen ab dem Anwenden. Beim Checkout ist das der Abo-Start, bei
laufendem Abo und Testkonto (Coupon per Webhook) der Zeitpunkt des
Anhängens; Testkonten laufen deshalb einen Monat länger.
Tests: npm test (37 Fälle, davon 8 neu).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>