Backend for the Super Admin Dashboard's Payments page — Super Admin only, the whole page/routes/endpoints must 403 for Admin and Reviewer.
Blocked on open questions (don't block on them — build structure, leave data slots empty):
- OQ-03: Payment provider not yet confirmed (affects status value mapping, proration/trial states)
- OQ-04: Exact employer package tier names/prices/features above Free
- OQ-05: Talent subscription price
Scope:
- Stat cards (row of 4): Total Revenue, Active Employer Subscriptions (paid tiers only), Active Talent Subscriptions, Failed/Declined Payment Count
- Revenue chart: line/stacked-bar, split Employer Packages vs Talent Subscriptions, Yearly/Monthly/Weekly/Daily toggle, empty state "Not enough revenue data yet."
- Employer Packages table (incl. Free tier: $0, 2 offers included, no extra features)
- Talent Subscriptions section: single paid tier unlocking unlimited retakes past free 3
- Subscriptions table: Subscriber Name | Type | Package/Tier | Monthly Price | Status (Active/Past Due/Cancelled/Free) | Start Date | Next Billing Date — "Past Due" shows days left in 7-day grace period; grace expiry auto-reverts employer to Free (not suspension)
- Transactions table: Subscriber Name | Type | Amount | Date | Status (Successful/Failed/Refunded) | Linked Subscription
Gate every endpoint with @Roles(UserRole.ADMIN) + @AdminTiers(AdminTier.SUPER_ADMIN) only (see #264).
Backend for the Super Admin Dashboard's Payments page — Super Admin only, the whole page/routes/endpoints must 403 for Admin and Reviewer.
Blocked on open questions (don't block on them — build structure, leave data slots empty):
Scope:
Gate every endpoint with
@Roles(UserRole.ADMIN)+@AdminTiers(AdminTier.SUPER_ADMIN)only (see #264).