Kundenansicht neu E-Fix M8: Wechselangebot beim Einschalten nur, wenn der Wechsel möglich ist
aboDeckt nennt falsches_abo vor gekuendigt, beginnt_spaeter und nicht_aktiv (die Reihenfolge bleibt gepinnt). Die 409-Antwort setzte wechsel: true allein aus grund === 'falsches_abo': ein Hosting-Abo in der Probezeit, mit offener Zahlung oder vorgemerkter Kündigung bekam das Angebot, landete auf #wechsel bei "Ein Wechsel ist derzeit nicht möglich" und verlor den eigentlichen Grund. Jetzt prüft pruefeAboDeckung bei falsches_abo zusätzlich wechselMoeglich (aboFunktionen.js, dieselben Bedingungen wie canSwitch und assertCanSwitch: Hosting, aktiv, nicht gekündigt, kein offener Wechsel); ein Lesefehler dabei nimmt nur das Angebot weg. Test in funktionEinschalten.test.js. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
29ca12a409
commit
3e32ddfe86
3 files changed
+46
-5
No files matched your search
@@ -45,6 +45,7 @@ async function lies(customerId, now) {
|
||||
// Ereignisse dieses Abos: Wechsel-Regel und offene Widerrufsfristen
|
||||
const ereignisse = (await listContractEvents(customerId)).filter((e) => e.subscriptionId === abo.$id)
|
||||
const wechselWiderrufen = ereignisse.find((e) => e.type === 'wechsel')?.status === 'widerrufen' // neueste zuerst
|
||||
const wechselOffen = ereignisse.some((e) => e.type === 'wechsel' && e.status === 'offen')
|
||||
const produkt = spiegel === 'wartung' && wechselWiderrufen ? 'hosting' : spiegel
|
||||
|
||||
const enden = openWithdrawals(ereignisse.filter((e) => FRIST_TYPEN.has(e.type)), now).map((f) => zeitpunkt(f.until))
|
||||
@@ -56,6 +57,7 @@ async function lies(customerId, now) {
|
||||
widerrufsfristBis: spaetestes === null ? null : new Date(spaetestes).toISOString(),
|
||||
status: abo.status,
|
||||
trialEnd: abo.trialEnd,
|
||||
wechselOffen,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +67,15 @@ export async function aboProdukt(customerId, { now = new Date() } = {}) {
|
||||
return { produkt, laeuft, gekuendigt, widerrufsfristBis }
|
||||
}
|
||||
|
||||
/**
|
||||
* Kann der Kunde jetzt ins Wartungs-Abo wechseln (E-Fix M8, wie canSwitch in GET /api/abo und assertCanSwitch in planSwitch.js)? Hosting-Abo, Status active,
|
||||
* nicht gekuendigt (cancelAtPeriodEnd oder cancelAt), kein Wechsel, der auf die Zahlung wartet. Lesefehler werden weitergereicht.
|
||||
*/
|
||||
export async function wechselMoeglich(customerId, { now = new Date() } = {}) {
|
||||
const l = await lies(customerId, now)
|
||||
return l.laeuft && l.produkt === 'hosting' && !l.gekuendigt && l.status === 'active' && !l.wechselOffen
|
||||
}
|
||||
|
||||
/**
|
||||
* Deckt das Abo des Kunden diese Funktion? { ok: true } | { ok: false, grund } mit grund in der Reihenfolge
|
||||
* kein_abo, falsches_abo, gekuendigt, beginnt_spaeter (mit ab = Ende der Probezeit als ISO), nicht_aktiv.
|
||||
|
||||
Reference in new issue
Block a user