SRS: UC_4.15.3 — Scenario B: Live Failure (In-App Re-Buy)
UC_4.15.3: Scenario B — Live Failure (In-App Re-Buy)
| Field | Value |
|---|---|
| BA in Charge | Huyen Dinh |
| Date Created | 2026-08-18 |
| Version | v4.3 |
| Document References | RFQ_ Stack Trading Prop Tech V7.pdf (§Scenario B: Live Failure, §Appendix A/B, §Appendix J) · Zapier Integration V7.pdf (§Flow 7B Path B, §Table A/B, §Table C, §Table J) · RFQ_ Website and Dashboard Implementation V7.pdf (§Scenario B) · QnA_init_docs.md (UC_4.15.3, 9 items) · Wireframe: References/Wireframe/Stage 2.2/Failure and recovery/ |
Architecture note: LIVE Re-Buy is the direct counterpart of UC_4.10.3 (SIM Reset) — same gate architecture (Status → Sanctions → Vaulted card) and the same payment/promo-code mechanics. Sections identical to UC_4.10.3 reference it directly rather than repeating content. Five confirmed divergences are written out in full for LIVE:
- No "Reset — reuse sub-account" branch. LIVE's trading sub-account is provisioned fresh on every Re-Buy, regardless of whether it was cleaned up before or after
archive_date.- Founder pricing has no window split.
is_founder == TRUEalways resolves tolocked_rebuy_price, regardless of thearchive_datewindow.- Archival/Day 0 lifecycle differs from SIM's timing. Dashboard freezes at exact breach metrics until
archive_date, not reset immediately.
Document References
| # | Original Document | Key Sections Used |
|---|---|---|
| 1 | RFQ_ Stack Trading Prop Tech V7.pdf | §Scenario B: Live Failure (In-App Re-Buy) — Pricing Rule, Business Logic, Endpoints |
| 2 | RFQ_ Website and Dashboard Implementation V7.pdf | §Scenario B — Failure Modal ("Trading Authority Revoked"), 1-Click Re-Buy Modal, Secure Checkout fallback |
| 3 | Zapier Integration V7.pdf | §Flow 7B Path B (Live/Funded retention pricing), §Table A/B (Retry_Discount), §Table C (Discount_Code_Duration_Days), §Table J (Challenge Price, locked_rebuy_price) |
| 4 | QnA_init_docs.md (UC_4.15.3) | QN-4.15.3-01 through -08 (incl. -01a) — all BA-confirmed |
| 5 | UC_4.10.3 | §5 (Gate/Path flow), §6 (Promo Code), §6a (Payment Flow — All Standard Cases), §7 (Exceptional Flow payment cases), §9/§10 (shared wireframes) |
| 6 | UC_4.15.2 | Trigger precursor (Hard Breach → Terminated), Post-conditions (immediate hard-delete), Flow 7B Path B pricing routing |
| 7 | UC_5.6 | Flow 3F — Market Data Setup (live phase) — forward dependency for Futures Re-Buy |
| 8 | Wireframe Stage 2.2 | Level 1 - 8_ Standard failure modal, no severance, no defense.png; Level 1 - 8_ Failure modal with Severance notice. No defense.png (in References/Wireframe/Stage 2.2/Failure and recovery/) |
1. Overview
| Field | Content |
|---|---|
| ID | UC_4.15.3 |
| Use Case | Scenario B: Live Failure (In-App Re-Buy) |
| Description | After a Live trader's account is terminated (Status ='Terminated', via UC_4.15.2 Hard Breach), the Dashboard renders a permanent Failure Modal overlaid on a Frosted Glass (darkened) background. |
| Zapier Flow | — (direct API call, no dedicated Zapier flow for the purchase itself). |
| Zapier Table | Table A (Forex) / Table B (Futures) —Retry_Discount per levelTable C — Discount_Code_Duration_DaysTable J — Full Challenge Price, locked_rebuy_price |
| 3rd Party | Quaderno (tax calculation via/calculate-cart)Compliance_geo_restrictions (sanctions check)NMI (vaulted-card charge / Secure Checkout)Rithmic (isolated simulation gateway) via POST /provision-sim-userKlaviyo (Retention_Offer_Discount email, upstream trigger — see UC_4.15.2) |
2. Trigger
This UC has three entry points that all land on the same Re-Buy purchase modal (§9.3):
- Entry Point 1 — Dashboard (Failure Modal): Status =
'Terminated'after Hard Breach (UC_4.15.2) → the Dashboard renders the permanent Frosted Glass overlay. On top of it, the Failure Modal (§10.1/§10.2 — "Trading Authority Revoked") appears and persists on every Dashboard visit until purchase → user clicks CTA "Start Associate Track" → system begins pricing calculation (§5 Step 1). - Entry Point 2 — Account Actions screen ("Re-Buy" button): the terminated trader's Settings → Account Actions screen exposes a "Re-Buy" CTA that bypasses the Failure Modal and goes straight into pricing calculation (§5 Step 1).
- Entry Point 3 — Founding Mentor overlay acknowledgement: per UC_4.15.2 §6 Alternative Flow, after the Founding Mentor-specific overlay is acknowledged, the Re-Buy Modal opens directly at
locked_rebuy_price— skipping the Failure Modal and the tax-loading step (pricing is already resolved viaPOST /calculate-cartduring the overlay flow).
3. Pre-conditions
- Trader's account Status =
'Terminated'
4. Post-conditions
Payment successful:
trade_history(the failed live ledger) auto-archived →user_account_history.- Live sub-account permanently dropped via the execution gateway — broker-specific per UC_4.15.2 BR_4.15.2.7.
- User profile reset back to an evaluation track at the trader's current tier (Level 1, 2, or 5) — Status =
'Active_SIM'. POST /provision-sim-usercalled → brand-new SIM sub-account provisioned with new credentials on the isolated simulation gateway. [CHR-61]- Fields that remain intact (on going-live again, users can bypass Rippling, Dots and Veriff):
identity_status,contract_status,institution_approval_status,payout_status,dots_payee_id,veriff_failed_flag,veriff_attempts. setup_statusreset toNULLfor Futures traders (Rithmic only). [CHR-62]- Rithmic Futures only: Market Data re-select screen (§10.6) is displayed immediately after payment succeeds — non-dismissible. Trader cannot access the dashboard until selection is submitted. After submission → Success screen "Track Started" (§10.5) → "Return to Dashboard" → Dashboard Day 0.
- All other brokers (MT5, TraderEvolution): Success screen "Track Started" (§10.5) displayed immediately after payment succeeds → "Return to Dashboard" → Frosted Glass removed → Dashboard Day 0 with new SIM credentials.
- User can find new SIM credentials in Dashboard Settings.
Archival lifecycle (if user has not yet purchased):
- From T+0 to
archive_date(broker-specific — see UC_4.15.2 BR_4.15.2.7): Dashboard stays frozen at the exact breach metrics (equity, balance, closed trades) — not reset to Day 0. This is the window during which Re-Buy is priced at the discounted/founder rate. - After
archive_date: historical ledger purged from the active dashboard view (data remains inuser_account_history); dashboard resets to a blank Day 0 state. Re-Buy after this point is priced at the full/expired rate — see BR_4.15.3.1. - Re-Buy Exception: if the trader purchases before
archive_datepasses, the backend's atomic reset immediately wipes the failed state and resets the dashboard to Day 0 for the new SIM challenge — the archival window is short-circuited, not waited out.
5. Basic Flow
Step 0 — Failure Modal displayed:
- After Hard Breach, Dashboard shows the permanent Frosted Glass overlay.
- Failure Modal (§10.1 or §10.2) is rendered on top, showing the CTA "Start Associate Track" and the archive countdown banner (same display logic as UC_4.10.3 §10.1 item 4, computed off
archive_date). - This modal persists on every Dashboard visit until the trader completes a purchase.
Step 1 — User clicks CTA → system loads pricing:
- Compare NOW against
failure_timestamp + Discount_Code_Duration_Days(Table C) → determines whether the pricing window is still open. At the same time, checkuser.is_founderto determine pricing tier. Ref: BR_4.15.3.1 for pricing routing. - Modal transitions to a loading state — spinner + "Calculating regional taxes..." (identical UX to UC_4.10.3 §5.1 Step 1). The frontend calls
POST /calculate-cartwith the full payload. Final_Charge = Price + tax_amount, whereDiscounted_Priceis resolved per BR_4.15.3.1.- Once
POST /calculate-cartreturns HTTP 200: loading state closes → Re-Buy Modal (§10.3) opens with calculated pricing. The promo code entry point ("Have a promo code?") is available on this modal — Ref: UC_4.10.3 §6 (identical flow). - The base price displayed in the Re-Buy Modal is the amount that will be charged — it does not change between modal open and pay click. Tax is recalculated at the moment the user clicks pay and may differ slightly from the estimate shown in the modal. Ref: UC_4.10.3 §6.
Step 2 — User clicks CTA "Start Associate Track ($X)" on Re-Buy Modal → POST /initiate-rebuy:
The endpoint performs the full sequence below in order:
- Gate 1 — Status validation: Check
Status == 'Terminated'on the Live DMA account profile. If not → modal closes immediately, Ref: TE-DASH-01 toast displayed (same pattern as UC_4.10.3 §7 Gate 1). - Pricing: resolve
Priceper BR_4.15.3.1 (Founder →locked_rebuy_price; Standard within window →Challenge_Price × (1 − Retry_Discount); Standard expired → Full Challenge Price). - Gate 2 — Sanctions: query
billing_country/billing_regionfrom the Users table → check againstCompliance_geo_restrictions(with regional exemptions such as Canada/Ukraine evaluated on theregionparameter). If a match is found → return HTTP 403 immediately with the restricted Country/Region in the payload → frontend displays Ref: FP-02. - Tax Engine: ping Quaderno API with
billing_countryandDiscounted_Priceto calculate tax. - Math:
Final_Charge = Price + Tax. - Gate 3 — Execution / UI fallback: check the Users table for
customer_vault_id(NMI):- Present → Path A (1-Click): execute NMI server-to-server charge for
Final_Charge. Same behaviour as UC_4.10.3 §5.1 Path A - Not present → Path B (Secure Checkout Fallback): return a payload directing the frontend to the standard Secure Checkout screen, presenting the region-based options matching
GET /system/status. Same behaviour as UC_4.10.3 §5.1 Path B.
- Present → Path A (1-Click): execute NMI server-to-server charge for
- Provisioning (on successful transaction only — execution order is strict per UC_4.15.2 BR_4.15.2.7): [CHR-61]
- 7a. Data Integrity Sync (Case A only — pre-deletion gate): Verify all final trade data and P&L snapshots for the failed LIVE account are successfully synced to both PostgreSQL and AWS S3 Glacier (immutable system of record, independent of execution platforms). Sub-steps 7b and 7c may not proceed until this sync is confirmed.
- 7b. Provision new SIM sub-account: Broker-specific per UC_4.15.2 BR_4.15.2.7:
- Case A (Re-Buy before
archive_date— Failsafe not yet fired): Rithmic: revoke Live Pro Market Data → provision brand-new SIM sub-account on Paper Trading Gateway → assign to existing User ID. MT5 / TraderEvolution: provision brand-new SIM sub-account. - Case B (Re-Buy after
archive_date— Failsafe already fired): Rithmic: re-enable User ID (disabled by Failsafe) → provision brand-new SIM sub-account → assign to existing User ID. MT5 / TraderEvolution: provision brand-new SIM sub-account only.
- Case A (Re-Buy before
- 7c. Delete/unassign old LIVE sub-account (Case A only): Broker-specific per UC_4.15.2 BR_4.15.2.7: Rithmic: set LIVE sub-account status to
"unassigned". MT5 / TraderEvolution: hard-delete locked LIVE sub-account.
Path A — 1-Click Purchase (vaulted card present):
Identical to UC_4.10.3 §5.1 Path A
- Rithmic Futures traders: Market Data re-select screen (§10.6) displayed immediately — non-dismissible — before any navigation to dashboard. After submission → Success screen "Track Started" (§10.5).
- All other brokers: Success screen "Track Started" (§10.5) displayed directly.
Path B — Secure Checkout Fallback (no vaulted card):
Identical to UC_4.10.3 §5.2 Path B — REF'd, not duplicated.
Path C — Change Payment Method:
Identical to UC_4.10.3 §5.1 Path C — REF'd, not duplicated.
6. Promo Code Flow
Identical to UC_4.10.3 §6 Promo Code Flow, including the Apply-click product-ID mismatch check added by [CHR-55] — this UC's flow sends product_id="REBUY".
6a. Payment Flow — All Standard Cases
Identical to UC_4.10.3 §6a Payment Flow — All Standard Cases.
7. Exceptional Flow
-
[Gate 1 fails — Status no longer 'Failed'/'Terminated' at pay click]
- Re-Buy Modal closes immediately → Ref: TE-DASH-01 toast displayed.
-
[Gate 2 fails — Sanctions]
Compliance_geo_restrictionsmatch → HTTP 403 → Ref: FP-02 displayed.
-
[Payment fails — Secure Checkout Path B/C]
Identical to UC_4.10.3 §7 Exceptional Flow — Secure Checkout Path B/C table.
-
[SIM provisioning failure — after payment already succeeded]
- Applies to §5 Step 2 sub-step 7, where
POST /provision-sim-useris called after the charge has already cleared. Handled with the same classify → retry → escalate pattern, Freshdesk ticket, SES-23 email, and Success Screen replacement described in UC_4.10.3 §7 Exceptional Flow — SIM provisioning failure
- Applies to §5 Step 2 sub-step 7, where
8. Business Rules
BR_4.15.3.1: Re-Buy Pricing — Founder vs. Standard (No Window Split for Founder)
LIVE Re-Buy pricing has three routes. The pricing window is determined solely by Discount_Code_Duration_Days (Table C): failure_timestamp + Discount_Code_Duration_Days.
| Condition | Price |
|---|---|
is_founder == TRUE (any time, window irrelevant) | locked_rebuy_price (Users table) — never locked_reset_price, which is SIM-only |
is_founder == FALSE, within failure_timestamp + Discount_Code_Duration_Days | Challenge_Price × (1 − Retry_Discount) — Challenge_Price from Table J by Current_Level at time of failure, Retry_Discount from Table A/B |
is_founder == FALSE, after failure_timestamp + Discount_Code_Duration_Days | Full Challenge Price (Table J, by eval tier at time of initial purchase) |
- CTA label is always "Start Associate Track" regardless of route — LIVE has no separate "Reset" CTA text, since there is no reuse-sub-account path.
BR_4.15.3.2: Re-Buy Always Provisions a New Sub-Account [CHR-61]
POST /initiate-rebuyalways provisions a new sub-account viaPOST /provision-sim-user.- Execution order within provisioning is strict: (1) Sync PostgreSQL + S3 Glacier → (2) Provision new SIM sub-account → (3) Delete/unassign old LIVE sub-account (broker-specific).
- Rithmic Server Separation & Gateway Transition Rule: A Re-Buy moves a trader from Live back to Simulation. Rithmic separated environments are: (1) Paper Trading Server (SIM), and (2) Live Trading Server (Ironbeam). The existing Rithmic User ID is preserved throughout — only the sub-account changes. The system does not just unassign the live sub-account and create a new one on the same server. The backend must provision the new sub-account on the Rithmic Paper Trading Gateway.
BR_4.15.3.3: Futures Market Data Re-Select — Forward Dependency
- For Futures traders,
setup_statusresets toNULLon Re-Buy — the trader must re-select Market Data packages and pay any applicable add-on fee before a laterPOST /provision-live-usercall, once they pass the new SIM challenge and re-enter Live promotion. - This step exists outside this UC's scope — REF UC_5.6 (Flow 3F — Market Data Setup, live phase) for the full flow.
BR_4.15.3.4: Archival / Day 0 Lifecycle
- Breach freezes the Dashboard at the exact breach metrics (equity, balance, closed trades) — no immediate reset to Day 0.
archive_date= broker-specific per UC_4.15.2 BR_4.15.2.7- Only when
archive_datepasses does the frontend reset to a blank Day 0 state, purging the historical ledger from the active UI view (data remains inuser_account_history). - Re-Buy Exception: a successful Re-Buy before
archive_dateimmediately triggers the atomic reset to Day 0 for the new SIM challenge, regardless of how much of the window remains.
9. Wireframe / UI
9.1 Overall Flow — Popup Sequence
[Entry Point 1: Dashboard] [Entry Point 2: Account Actions] [Entry Point 3: Founding Mentor]
| | |
v | |
[1. Failure Modal] | |
<- persists on every | |
Dashboard visit until purchase | |
| | |
| CTA "Start Associate Track" | "Re-Buy" button | Overlay acknowledged
| | (Failure Modal bypassed) | (pricing already resolved)
v v v
`-----------------> [Loading: "Calculating regional taxes..."] <----------------'
POST /calculate-cart -> price calculated
|
v
[2. Re-Buy Modal] <- single variant (no Reset/Start-New split like SIM)
|- vaulted card present -> 1-Click [§10.4]
`- no vaulted card -> Secure Checkout [UC_4.10.3 §10.4]
|
| User clicks CTA (Pay) -> POST /initiate-rebuy
v
[3. Processing Payment popup] <- 1-Click path only
|
|- Success (Rithmic Futures) -> [§10.6 Market Data re-select screen] -> Submit -> [§10.5 Success screen "Track Started"] -> "Return to Dashboard" -> Dashboard Day 0
|- Success (all other brokers) -> [§10.5 Success screen "Track Started"] -> "Return to Dashboard" -> Dashboard Day 0 (new SIM)
`- Failure -> Back to modal (2) with inline banner error9.2 Failure Modal — Wireframe Variants
Wireframe source: References/Wireframe/Stage 2.2/Failure and recovery/
| Variant | Wireframe filename | Applies to | Documented in |
|---|---|---|---|
| A | Level 1 - 8_ Failure modal, no severance, no defense.png | Level 1-8, no severance | §10.1 |
| B | Level 1 - 8_Failure modal with Severance notice. No defense.png | Level 1-8, with severance notice | §10.2 |
| C | Level 9 - 24_ Drawdown defense notice.png | Level 9-24, defense available (defense_used == FALSE) | REF UC_4.15.4 |
| D | Level 9 - 24 Failure modal with no severance, no defense.png | Level 9-24, defense exhausted (defense_used == TRUE), no severance | §10.3 |
| E | Level 9 - 24_ Failure modal with Severance notice. Defense exhausted.png | Level 9-24, defense exhausted (defense_used == TRUE), with severance notice | §10.4 |
All variants share:
- Countdown banner: "Data will be archived in X days" (dynamic)
- CTA button: "Start Associate Track"
Variant B (Level 1-8 with severance) additionally inserts a Severance notice box (amber-toned highlighted text) between the body copy and the countdown banner.
Variant E (Level 9-24, defense exhausted, with severance) additionally inserts a Next Steps box between the body copy and the countdown banner.
9.3 Re-Buy Modal
Single modal variant (no Reset/Start-New-Track split like SIM). Varies only on vaulted card presence: 1-Click (§10.4) or Secure Checkout fallback (UC_4.10.3 §10.4).
10. Screen Description and Business Rules
10.1 Failure Modal — Variant A: Level 1-8 (No Severance)
Wireframe:
Level 1 - 8_ Failure modal, no severance, no defense.png
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Modal Header | Label | Display rule:- Text: "Trading Authority Revoked"Behaviour:- Static. |
| 2 | Body Text | Label | Display rule:- Text: "We understand this is a difficult moment. Trading is a high-performance discipline, and even the best professionals experience drawdowns. Your live trading privileges for this specific account have been revoked per the risk agreement."Behaviour:- Static copy. No truncation (wraps within modal). |
| 3 | Archive Countdown Banner | Label | Display rule:- Text: "Data will be archived in 10 days" — dynamic: "10 days" is replaced by countdown per BR_4.15.3.4 ("X days" / "Y hours" / "less than 1 hour"), computed off archive_dateBehaviour:- Hidden once NOW > archive_date. Ref: BR_4.15.3.4. |
| 4 | CTA Button | Button (Primary) | Display rule:- Text: "Start Associate Track" (label fixed — no price appended on this modal, unlike the Re-Buy Modal)Behaviour:- On click → transitions to loading state (spinner + "Calculating regional taxes...") — Ref: §5 Step 1. |
10.2 Failure Modal — Variant B: Level 1-8 (With Severance Notice)
Wireframe:
Level 1 - 8_Failure modal with Severance notice. No defense.png
Extends Variant A (§10.1) with one additional element (#3 below); elements #1, #2, #4, #5 are identical to §10.1:
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Modal Header | Label | Same as §10.1#1 — "Trading Authority Revoked" |
| 2 | Body Text | Label | Same as §10.1#2 — exact same copy. |
| 3 | Severance Notice Box | Label (highlighted) | Display rule:- Text: "However, we would like to offer a token of our appreciation. A member of our team will contact you shortly to arrange an exit interview and severance payout."Behaviour:- Static. Displayed only for Level 1-8 traders who qualify for severance. |
| 4 | Archive Countdown Banner | Label | Display rule:- Text: "Data will be archived in 10 days" — same dynamic countdown logic as §10.1 #3Behaviour:- Same as §10.1 #3 (Ref: BR_4.15.3.4). |
| 5 | CTA Button | Button (Primary) | Same as §10.1#4 — "Start Associate Track". |
10.3 Failure Modal — Variant D: Level 9-24 (Defense Exhausted, No Severance)
Wireframe:
Level 9 - 24 Failure modal with no severance, no defense.png
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Modal Header | Label | Display rule:- Main title: "Risk Parameter Breached"- Sub-title below: "Trading Revoked"Behaviour:- Static. |
| 2 | Body Text | Label | Display rule:- Text: "Your account has exceeded the maximum drawdown limit. As per our Risk Policy, trading access has been permanently disabled for this account. We appreciate your contribution. You have performed better than the majority of traders to reach this level, and this result does not erase your professional capability."Behaviour:- Static copy. |
| 3 | Archive Countdown Banner | Label | Display rule:- Text: "Data will be archived in 10 days" — dynamic countdown per BR_4.15.3.4 ("X days" / "Y hours" / "less than 1 hour"), computed off archive_dateBehaviour:- Hidden once NOW > archive_date. |
| 4 | CTA Button | Button (Primary) | Display rule:- Text: "Start Associate Track"Behaviour:- On click → transitions to loading state (spinner + "Calculating regional taxes...") — Ref: §5 Step 1. |
10.4 Failure Modal — Variant E: Level 9-24 (Defense Exhausted, With Severance)
Wireframe:
Level 9 - 24_ Failure modal with Severance notice. Defense exhausted.png
Scope note: Applies only when
defense_used == TRUEANDSeverance_Pay > 0— trader previously activated the Defense Protocol (UC_4.15.4) and has now breached again with a severance entitlement. For the defense-exhausted + no severance case, see §10.3.
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Modal Header | Label | Display rule:- Main title: "Risk Parameter Breached"- Sub-title below: "Trading Revoked"Behaviour:- Static. |
| 2 | Body Text | Label | Display rule:- Text: "Your account has exceeded the maximum drawdown limit. As per our Risk Policy, trading access has been permanently disabled for this account. We appreciate your contribution. You have performed better than the majority of traders to reach this level, and this result does not erase your professional capability."Behaviour:- Static copy. |
| 3 | Next Steps Box | Label (highlighted) | Display rule:- Label: "Next Steps:"- Text (exact copy per wireframe): "A member of our team will call you shortly to conduct your exit interview and discuss a Severance payment. Please keep an eye on your inbox for scheduling details."Behaviour:- Static. Always shown for this variant (Level 9-24, defense exhausted, with severance). |
| 4 | Archive Countdown Banner | Label | Display rule:- Text: "Data will be archived in 10 days" — dynamic countdown per BR_4.15.3.4 ("X days" / "Y hours" / "less than 1 hour"), computed off archive_dateBehaviour:- Hidden once NOW > archive_date. |
| 5 | CTA Button | Button (Primary) | Display rule:- Text: "Start Associate Track"Behaviour:- On click → same pricing/payment flow as Variants A/B/D (§5 Step 1 onward). |
10.5 Re-Buy Modal (1-Click)
Wireframe:
References/Wireframe/Stage 2/Failure and Recovery/Start a new track modal (1).png(default + error state),Start a new track modal + Promo code.png(promo applied state).
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Modal Header | Label | Display rule:- Main title: "Start New Associate Track"- Sub-title: "Provision a brand new evaluation account"Behaviour:- Static. |
| 2 | Payment Failed Banner | Inline Error Banner | Display rule:- Hidden by default. Shown only when a previous payment attempt failed. |
| 3 | Promo Code | Expandable Section | Display rule:- Collapsed state: "Have a Promo Code?" link + collapse toggle (−).- Expanded (no code): text input field + "Apply" button.- Expanded (code applied): field shows code (e.g. xZygh17839) + "Remove" button; price breakdown updates immediately.Behaviour:- Same logic as UC_4.10.3 §10.2 item 2 |
| 4 | Price Breakdown Box | Label | Display rule:- Row 1: "New Associate Track" / "Fresh account · Day 1 start" — base price per BR_4.15.3.1- Row 2: "Tax ([Region])" — $[tax_amount]- Row 3 (if promo applied): "Promo ([code])" — −$[discount]- Row 4 (if promo applied): "Subtotal" — $[Subtotal], where Subtotal = base price − discount. Same show/hide rule as Row 3 (Promo) above. Ref: UC_2.7.8 BR_2.7.8.3. [CHR-51]- Row 5: "Total" — $[Final_Charge] (amber colour)Behaviour:- Base price locked at CTA click per BR_4.15.3.1. Tax re-calculated at click. Subtotal row appears/disappears together with the Promo row. |
| 5 | Vaulted Card | Label (read-only) | Display rule:- Card brand logo + "[Brand] ending in [last4]" + "Change Payment Method" link.Behaviour:- "Change Payment Method" → navigates to payment method screen (Secure Checkout path). |
| 6 | CTA Button | Button (Primary) | Display rule:- Label: "Start Track Now ($[Final_Charge])" — total shown in CTA.Behaviour:- Disabled immediately on click (prevents double-submit).- On click → POST /initiate-rebuy → Processing Payment popup.- On success (Rithmic Futures) → §10.7 (Market Data re-select) → §10.6 (Success screen).- On success (Forex) → §10.6 (Success screen) directly.- On payment failure → display a banner.- On SIM provisioning failure after payment → Ref: §7 Exceptional Flow. |
| 7 | Cancel Button | Button (Secondary) | Behaviour:- On click → modal closes; Dashboard stays with Frosted Glass. No payment triggered. |
10.6 Success Screen ("Track Started")
Wireframe:
Payment succeed - Start a new track.png
Display order: For Rithmic Futures traders, this screen appears after the Market Data re-select screen (§10.6) is submitted — not immediately after payment. For all other brokers, it appears immediately after payment succeeds.
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Header | Label | Display rule:- "Track Started"Behaviour:- Static copy. |
| 2 | Body Text | Label | Display rule:- "Your new Associate Track account has been provisioned."Behaviour:- Static copy. |
| 3 | CTA Button | Button (Primary) | Display rule:- "Return to Dashboard"Behaviour:- On click → screen closes → Frosted Glass removed → Dashboard Day 0 with new SIM credentials. |
10.7 Market Data Re-Select Screen (Rithmic Futures Re-Buy only)
Wireframe:
References/Wireframe/Stage 2.2/Failure and recovery/Rebuy -_ User must choose market data again for Non-pro feed.pngRef: UC_4.15.2 BR_4.15.2.8 — feed pricing logic, reuse rules, cap enforcement.
Condition: Displayed immediately after Re-Buy payment succeeds, for Rithmic Futures traders only. Non-dismissible — re-displays on every page reload or re-login until the trader submits. Trader cannot access the dashboard before completing this step.
| No. | Element | Type | Validation Rule / Behaviour |
|---|---|---|---|
| 1 | Page Title | Label | Display rule:- Text: "Market Data"Behaviour:- Static. |
| 2 | CME Level 2 Feed | Toggle/Switch | Display rule:- Label: "CME Level 2". "Most Popular" badge shown.- Default: ON (pre-selected and locked).Behaviour:- Non-toggleable — always included. Cannot be switched OFF. Mirrors BR_2.5.1. |
| 3 | Optional Feeds (NYMEX / CBOT / COMEX) | Toggle/Switch ×3 | Display rule:- 3 separate toggle cards: "NYMEX" / "CBOT" / "COMEX".- Default: OFF for all.Behaviour:- Toggle ON: adds feed to provisioning request. Toggle OFF: removes. State persists until "Complete" is clicked — does not auto-submit. |
| 6 | [Complete] | Button (Primary) | Display rule:- Label: "Complete". Always enabled (CME is always selected).Behaviour:- On click → backend provisions selected feeds per BR_4.15.2.8 reuse/upgrade/swap logic.- On success → Success screen "Track Started" (§10.5). |
Changelog
| Date | Version | Updated item | Before | After | Notes |
|---|---|---|---|---|---|
| 2026-08-18 | v1 | Initial creation | — | Full SRS with 7 BRs (BR_4.15.3.1–.7), Overview, Trigger (4 entry points), Pre-conditions, Post-conditions, Basic Flow, Promo Code/Payment Flow, Exceptional Flow, Wireframe/UI, Screen Description | Authored per Init Flow Step 3 (Architect). |
| 2026-09-03 | v4 | BR_4.15.3.1 table — window anchor made explicit | within/after Discount_Code_Duration_Days | within/after failure_timestamp + Discount_Code_Duration_Days | Editorial — matches the anchor wording already used in the same BR's intro line and in UC_4.15.2 BR_4.15.2.7 M2. No logic/value change. |
| 2026-09-04 | v4.3 | §6 Promo Code Flow note — check timing corrected to Apply-click only | Note did not state when the mismatch check runs | Note now states the check runs at [Apply] click (POST /calculate-cart), inherited from UC_4.10.3 | CHR-55 correction — user instruction 2026-09-04. Companion changes: UC_2.7-2.8_v1.md v4.5, list-toast-popup.md v3.22. |
| 2026-09-04 | v4.2 | §6 Promo Code Flow — product-ID mismatch inherited from UC_4.10.3 | REF line only, no mention of product-ID mapping | REF line now states this UC's flow sendsproduct_id="REBUY" and inherits the CHR-55 mismatch check (UC_2.7.8 BR_2.7.8.7, IN-PROMO-05) | CHR-55. Companion change:UC_2.7-2.8_v1.md v4.4, UC_4.10.3_v1.md v4.0. |
| 2026-09-04 | v4.1 | §10.5 item 4 Price Breakdown Box — new Subtotal row | Box had Row 1-4 (Base/Tax/Promo/Total), no Subtotal row | New Row 4 "Subtotal" inserted before Total (Total renumbered to Row 5), same show/hide rule as the Promo row | CHR-51. MirrorsUC_2.7.8 BR_2.7.8.3. |
| 2026-08-25 | v3 | §10.4 [Complete] button — removed $54 cap error branch (BN-09) | - If selected feeds would exceed the $54.00 monthly cap → displays BN-09; screen does not dismiss. | Line removed. This error path is unreachable: the Non-Pro bundle is capped at 4 exchanges with the 4th free = $54 flat maximum, so no valid selection can exceed the cap. BN-09 also removed from list-toast-popup.md and UC_4.15.2 BR_4.15.2.8. | BA decision 2026-08-25. |