Create docs/monthly-billing-runbook.md (analog of tournament-billing-runbook) #504
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/basketball-api#504
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
Standalone — discovered 2026-04-18 during QA review of PR #499.
docs/tournament-billing-runbook.mdexists and covers the Payment Link operational surface for tournaments; no equivalent exists for monthly-fee. QA flagged the gap.Repo
forgejo_admin/basketball-apiUser Story
As Marcus or a future dev responding to a monthly-fee billing issue, I can open
docs/monthly-billing-runbook.mdand find the operational surface: how links are minted, when they deactivate, what to do when a parent reports a broken URL, how to re-mint a fresh Payment Link for a pending order. Same reference material we now have for tournaments.Context
With PR #499 merged, the monthly-fee flow uses Stripe Payment Links (no expiry) minted by
services/monthly_checkout.py::create_monthly_order_payment_linkfromroutes/checkout.py::first_payment_checkout. Emails embed{base_url}/checkout/first-payment?token=...which redirects toOrder.stripe_checkout_url. Payment Links deactivate on successful payment via the webhook gate widened in PR #499.All of that is now tribal knowledge in the PR description. It should be in a runbook so (a) Marcus can self-serve on "why isn't this parent paying?", (b) the next dev touching this area doesn't re-read #494 + #498 + #499 to reconstruct context, (c) the #497 recovery ticket can link to it as the mechanical-recovery reference.
File Targets
docs/monthly-billing-runbook.mddocs/tournament-billing-runbook.mdScope
Author a monthly analog of the tournament runbook. Sections to mirror:
first_payment_checkout,services/monthly_checkout.py).Order.amount_centsdrives the minted Price (scholarships, prorations, custom contracts).stripe_customer_idback-fill, and the Stripe dashboard view.Acceptance Criteria
docs/monthly-billing-runbook.mdexists and is published alongsidedocs/tournament-billing-runbook.mdTest Expectations
Constraints
setup_future_usage,amount_centsvsproduct.price_cents, and the redirect. Write for monthly's specifics.Checklist
docs/README.md(or whatever the docs index is)Related
forgejo_admin/basketball-api #494— tournament migrationforgejo_admin/basketball-api #498— monthly migration (PR #499)forgejo_admin/basketball-api #497— monthly recovery (will link this runbook for mechanical procedure)docs/tournament-billing-runbook.md— structural reference