Workflow: Billing Cycle
Swimlane diagram of the billing workflow — from approved sessions through invoice generation, parent payment, payout cycle creation, and educator payment.
Billing entity: NEUROPLAY SYSTEMS PTE. LTD.
All invoices are issued under NEUROPLAY SYSTEMS PTE. LTD. with UEN registration. Invoice design follows the INV-0687 template with late payment terms.
Billing Cycle
Step 1 of 9 — System: Approved sessions accumulated
Step Details
| Step | Actor | Action | Notifications | Backend State | Next Action (by whom) |
|---|---|---|---|---|---|
| 1 | System | Accumulates all approved sessions since last invoice | None | Sessions with status=Approved collected | System generates invoice (System) |
| 2 | System | Generates invoice (INV-XXXX format) | Parent alert: new invoice available | invoice row created with line items | Parent reviews invoice (Parent) |
| 3 | parent | Reviews invoice in Billing > Invoices tab | None | No state change | Parent pays or disputes (Parent) |
| 4 | parent | Pays invoice or raises dispute on specific sessions | Coordinator Telegram if dispute raised | invoice.status = Paid, or parent_issues row created | Coordinator creates payout cycle (Coordinator) |
| 5 | Coordinator | Creates payout cycle covering billing period | None | payout_cycle row created | Coordinator reviews (Coordinator) |
| 6 | Coordinator | Reviews educator sessions, fee calculations, tier rates | None | No state change | Coordinator finalizes (Coordinator) |
| 7 | Coordinator | Finalizes payout cycle | Educator Telegram: payout statement ready | payout_cycle.status = Finalized | Educator reviews (Educator) |
| 8 | Educator | Reviews payout statement via /mypay or web | Telegram notification with summary | No state change | System processes payout (System) |
| 9 | System | Payout processed (bank transfer) | Educator Telegram: payout completed | payout.status = Processed | Cycle complete |
Package Tracking
Parent packages (prepaid session bundles) are decremented as sessions are approved. The parent alerts system triggers warnings when a package drops below 20% remaining.
- Package low alert: Triggered at <20% remaining — appears in parent alerts banner and coordinator dashboard.
- Package ledger: Full audit trail of package credits and debits in
/admin/billing/packages. - Ad-hoc sessions: Sessions with
billed_as_addon=1are invoiced separately from regular package sessions. - Discount consumption:
consumeDiscountSession()inpricing.tshandles promotional discounts per session.