fix(billing): dunning kurtarma zinciri (migration 0035 + webhook + banner)
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Stripe gerçeği: 3 abonelik past_due (3×₺999 = brüt MRR'ın ~%27'si), 1 abonelik dün dunning'den iptal (tugem, ₺999 kayıp); kurtarma tarihsel %0. Kök nedenler: (1) dunning e-postasının CTA'sı ödeme imkânı olmayan /dashboard/subscription'a gidiyordu, (2) kart güncelleme yüzeyi hiç yok + yeniden checkout 'Zaten aktif aboneliğiniz var' ile bloklu, (3) app past_due'yu hiç bilmiyordu (DB state yok, banner yok), (4) subscription.deleted no-op'tu (churn görünmez + status active kaldığı için re-subscribe kalıcı bloklu). - migration 0035: user_subscriptions.dunning_since + dunning_invoice_url - handleInvoiceFailed: dunning state persist + e-posta CTA'sı Stripe hosted invoice sayfasına (öde/yeni kart/3DS) + milestone e-posta (1./3./final — deneme başına aynı mail spam'i bitti) + attempt_count PostHog'a - handleInvoicePaid: her iki dalda dunning temizliği - handleSubscriptionDeleted: status→cancelled (re-subscribe deblke), subscription_churned PostHog event'i (reason: payment_failure/cancelled) - web: DunningBanner (kapatılamaz, kırmızı; CTA hosted invoice) dashboard'da - spec: yeni davranışa güncellendi + milestone/final testleri (14/14) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -246,6 +246,13 @@
|
||||
"when": 1784965129879,
|
||||
"tag": "0034_vehicle_fully_fetched",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"version": "7",
|
||||
"when": 1786435493000,
|
||||
"tag": "0035_subscription_dunning",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user