Subscription Success
Payment Successful
Your payment is confirmed and course access has been granted.
- 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
This is a cohort course — you will select a cohort before entering the lesson.
Screen Flow (SUC-BIL-01 — M-12 → M-13 routing into LMS, cross-subsystem):
📝 Spec notes — SUC-BIL-01 / SCR-BIL.10 Subscription Success (fields, actions, requirements, returnUrl context)
- Screen: SCR-BIL.10 — Subscription Success (page)
- Sub-use case: SUC-BIL-01 — Checkout via BCEL
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.
item_name"Item" — text · lookup Transaction.product_id · always · read-only · data_ref: Product.nameamount"Amount" — number · Transaction.amount · always · read-only · data_ref: Transaction.amountref_code"Reference No." — text · Transaction.ref_code · always · read-only · data_ref: Transaction.ref_codepaid_at"Payment Date" — datetime · Transaction.callback_received_at · always · read-only · data_ref: Transaction.callback_received_atproduct_type"Access type" — enum [lifetime, monthly, yearly] · Product.type · always · read-only · data_ref: Product.typeaccess_from"Access from" — date · Subscription.started_at · always · read-only · data_ref: Subscription.started_ataccess_until"Access until" — date · Subscription.expiry_date · visible when product_type != lifetime · read-only · data_ref: Subscription.expiry_date
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
- Support concurrent users per NFR-01 (100–200 peak) [refs: NFR-01]
- Works on connection ≤1 Mbps — lightweight static confirmation, no polling or heavy assets [refs: NFR-02]
- TLS 1.2+; user sees only their own Transaction/Subscription (server-side filter by session + ref_code ownership check) [refs: NFR-03, NFR-10]
- Responsive layout — single column; "Start" full-width on mobile [refs: NFR-08]
- 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]
- "Start" is the primary CTA, above the fold — reachable in 1 click without scrolling [refs: NFR-04]
- 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: —]
- Accessible only when Transaction.status = success; reload-safe via ref_code; non-success statuses redirect to appropriate flow [refs: SS-BIL.02]
- Current returnUrl: /purchase-course/subscription-success
- Fallback when empty:
/ - "Start" target:
/enroll-in-course/enroll-confirm(caller's post-success LMS entry point) - Propagation:
?returnUrl=…carried from Checkout (Index.cshtml) viasuccessUrl - Effective scenario:
(none)— Checkout'ssuccessUrldoes not append&scenario=…, so on a real click-through this page inferscaller-renewwheneverreturnUrlstarts with/renew-subscription, so the correct "View My Subscriptions" button shows instead of defaulting to the cohort-course UI
- 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