Sub-flow › Checkout via BCEL › Subscription Success
🎬 Simulate: Alt success · caller-renew (inferred from returnUrl) Reset SCR-BIL.10 · SUC-BIL-01 · 4 scenarios

Subscription Success

✅

Payment Successful

Your payment is confirmed and course access has been granted.

Order Summary
Item
Data Engineering 101
Amount
₭ 1,500,000
Reference No.
BIL-20260527-000128
Payment Date
2026-05-27 14:32
Access type
yearly
Access from
2026-05-27
Access until
2027-05-27
📝 Spec notes — SUC-BIL-01 / SCR-BIL.10 Subscription Success (fields, actions, requirements, returnUrl context)
Identity
  • Screen: SCR-BIL.10 — Subscription Success (page)
  • Sub-use case: SUC-BIL-01 — Checkout via BCEL
Brief description

Confirmation page after a successful BCEL checkout — confirms the payment passed security verification and the learner has been granted access (Subscription active). Displays a success banner + read-only order summary (item, amount, reference, paid-at, access from/until) + a "Start" button. When "Start" is pressed the system checks Course.is_cohort and routes into LMS Core (cross-subsystem): standard course → Lesson Player (SCR-PLY.01, AF-12A); cohort course → Enrollment Confirmation (SCR-LMS.05, M-13). Page accessible only when Transaction.status = success; reload-safe via ref_code.

Fields
  • item_name "Item" — text · lookup Transaction.product_id · always · read-only · data_ref: Product.name
  • amount "Amount" — number · Transaction.amount · always · read-only · data_ref: Transaction.amount
  • ref_code "Reference No." — text · Transaction.ref_code · always · read-only · data_ref: Transaction.ref_code
  • paid_at "Payment Date" — datetime · Transaction.callback_received_at · always · read-only · data_ref: Transaction.callback_received_at
  • product_type "Access type" — enum [lifetime, monthly, yearly] · Product.type · always · read-only · data_ref: Product.type
  • access_from "Access from" — date · Subscription.started_at · always · read-only · data_ref: Subscription.started_at
  • access_until "Access until" — date · Subscription.expiry_date · visible when product_type != lifetime · read-only · data_ref: Subscription.expiry_date
Actions
  • start "Start" — always enabled · routes into LMS Core: Course.is_cohort=false → SCR-PLY.01 Lesson Player (AF-12A); is_cohort=true → SCR-LMS.05 Enrollment Confirmation (M-13) · triggers SUC-BIL-01-M-12
Additional requirements
  1. Support concurrent users per NFR-01 (100–200 peak) [refs: NFR-01]
  2. Works on connection ≤1 Mbps — lightweight static confirmation, no polling or heavy assets [refs: NFR-02]
  3. TLS 1.2+; user sees only their own Transaction/Subscription (server-side filter by session + ref_code ownership check) [refs: NFR-03, NFR-10]
  4. Responsive layout — single column; "Start" full-width on mobile [refs: NFR-08]
  5. WCAG — success message via aria-live="polite"; focus moves to success heading on load; "Start" keyboard-accessible primary CTA and default focus after heading [refs: NFR-09]
  6. "Start" is the primary CTA, above the fold — reachable in 1 click without scrolling [refs: NFR-04]
  7. On "Start" the system checks Course.is_cohort → routes to SCR-PLY.01 Lesson Player (standard, AF-12A) or SCR-LMS.05 (cohort, M-13) [refs: —]
  8. Accessible only when Transaction.status = success; reload-safe via ref_code; non-success statuses redirect to appropriate flow [refs: SS-BIL.02]
ReturnUrl context
  • Current returnUrl: /renew-subscription/
  • Fallback when empty: /
  • "Start" target: /renew-subscription/ (caller's post-success LMS entry point)
  • Propagation: ?returnUrl=… carried from Checkout (Index.cshtml) via successUrl
  • Effective scenario: caller-renew — Checkout's successUrl does not append &scenario=…, so on a real click-through this page infers caller-renew whenever returnUrl starts with /renew-subscription, so the correct "View My Subscriptions" button shows instead of defaulting to the cohort-course UI
Sub-flow context
  • SUC ID: SUC-BIL-01 · SUC Name: Checkout via BCEL
  • Invoked by: UC-BIL.01 (Purchase Course), UC-BIL.03 (Renew Subscription)
  • Note: AF-10A (caller = UC-BIL.03) routes to SCR-BIL.01 Subscription Detail instead of this page — handled at the calling UC level