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
SystemparentCoordinatorEducator1 / 9SYSTEMApproved sessionsaccumulatedSessions with status=Approved queued2 / 9SYSTEMInvoice generatedInvoice record created3 / 9PARENTReviews invoiceNone4 / 9PARENTPays or disputes invoicePayment recorded or dispute created5 / 9COORDINATORCreates payout cyclePayout cycle initiated6 / 9COORDINATORReviews payout detailsNone7 / 9COORDINATORFinalizes payout cycleEducator notified via Telegram8 / 9EDUCATORReviews payout statementTelegram /mypay notification9 / 9SYSTEMPayout processedBank transfer initiated

Step Details

StepActorActionNotificationsBackend StateNext Action (by whom)
1SystemAccumulates all approved sessions since last invoiceNoneSessions with status=Approved collectedSystem generates invoice (System)
2SystemGenerates invoice (INV-XXXX format)Parent alert: new invoice availableinvoice row created with line itemsParent reviews invoice (Parent)
3parentReviews invoice in Billing > Invoices tabNoneNo state changeParent pays or disputes (Parent)
4parentPays invoice or raises dispute on specific sessionsCoordinator Telegram if dispute raisedinvoice.status = Paid, or parent_issues row createdCoordinator creates payout cycle (Coordinator)
5CoordinatorCreates payout cycle covering billing periodNonepayout_cycle row createdCoordinator reviews (Coordinator)
6CoordinatorReviews educator sessions, fee calculations, tier ratesNoneNo state changeCoordinator finalizes (Coordinator)
7CoordinatorFinalizes payout cycleEducator Telegram: payout statement readypayout_cycle.status = FinalizedEducator reviews (Educator)
8EducatorReviews payout statement via /mypay or webTelegram notification with summaryNo state changeSystem processes payout (System)
9SystemPayout processed (bank transfer)Educator Telegram: payout completedpayout.status = ProcessedCycle 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=1 are invoiced separately from regular package sessions.
  • Discount consumption: consumeDiscountSession() in pricing.ts handles promotional discounts per session.