From be007af7d09da36e1593ab0de6dc7b59712d0433 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 5 Oct 2026 07:04:52 +0000 Subject: [PATCH] K22: Abo-Ende nur bei beendetem Wartungs-Abo (nicht das Datum eines Hosting-Abos) Co-Authored-By: Claude Opus 5.5 --- server/services/termine/aboAbgleich.js | 3 ++- test/termineAboAbgleich.test.js | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/server/services/termine/aboAbgleich.js b/server/services/termine/aboAbgleich.js index 97ce504..714693b 100644 --- a/server/services/termine/aboAbgleich.js +++ b/server/services/termine/aboAbgleich.js @@ -139,7 +139,8 @@ export async function meldeAboEnde(doc, { lage = null, now, onGesendet = null }) const beginn = new Date(Number.isFinite(zeitMs(doc.disabledAt)) ? zeitMs(doc.disabledAt) : nowMs) // disabledAt fehlt nie, ausser bei Altdaten // enddatum ist der Tag des Abo-Endes (lage.endedAt: endedAt || canceledAt des Abos), wenn bekannt - das Abschalten kann Tage danach liegen; // sonst (Sofortpfad, Nachlauf ohne Abo-Lesen, kein lesbares Datum) der Tag des Abschaltens. loeschdatum bleibt 30 Tage nach dem Abschalten. - const aboEnde = zeitMs(lage?.endedAt) + // Nur bei art 'beendet' ist lage.endedAt das Ende des Wartungs-Abos; bei 'hosting' gehoert es zum Hosting-Abo (etwa eine vorgemerkte Kuendigung). + const aboEnde = lage?.art === 'beendet' ? zeitMs(lage.endedAt) : NaN const ende = Number.isFinite(aboEnde) ? new Date(aboEnde) : beginn const grundBlock = vorEinrichtung ? { vor_einrichtung: true } diff --git a/test/termineAboAbgleich.test.js b/test/termineAboAbgleich.test.js index 2975a01..54583ef 100644 --- a/test/termineAboAbgleich.test.js +++ b/test/termineAboAbgleich.test.js @@ -632,6 +632,14 @@ test('C3: ohne endedAt gilt canceledAt, ohne beides der Tag des Abschaltens (dis assert.match(mails().at(-1).text, /weil Dein Wartungs-Abo am 05\.10\.2026 beendet wurde/, 'unlesbares endedAt: disabledAt') }) +test('C3: bei einem Hosting-Abo nennt K22 den Tag des Abschaltens, nicht das Kuendigungsdatum des Hosting-Abos', async () => { + const id = legeFunktion(1, { state: 'disabled', enabled: false, disabledReason: 'abo_ende', disabledAt: JETZT.toISOString() }) + assert.equal(await meldeAboEnde(funktion(id), { lage: { laeuft: false, art: 'hosting', endedAt: AM_ABO_ENDE.toISOString() }, now: JETZT }), true) + const text = mails().at(-1).text + assert.match(text, /05\.10\.2026/, 'Tag des Abschaltens') + assert.doesNotMatch(text, /02\.10\.2026/, 'nicht das Datum des Hosting-Abos') +}) + test('C3: K22 vor_einrichtung nennt ebenfalls das Abo-Ende', async () => { legeAufbau(1) wartung('canceled', { endedAt: AM_ABO_ENDE.toISOString() })