Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

02 — User Personas (Payments)

Roles that touch payments, with exact permissions from permissions.constants.ts.


Accountant (primary)

  • Goals: record payments quickly, issue receipts, refund accurately, reconcile gateway outcomes, keep invoices PAID/PARTIAL correct.
  • Pain points: manual ledger duplication; verifying gateway outcomes; refund mistakes; money displayed as floats.
  • Frequency: daily (collection peaks on due dates).
  • Permissions (defined, not yet enforced): payments.read, payments.process, payments.refund, payments.reconcile, receipts.read, fees.collect.
  • Needs: quick payment form (amount prefilled from invoice), receipt preview, refund guard rails (reason required by process), status history.
  • Restrictions: no academic write access.
  • Mental model: "payment completes an invoice; refund reverses it; reconcile fixes a pending state."
  • Expected behaviour: every completed payment instantly produces a receipt; invoice due amount updates immediately.

Receptionist / Bursar

  • Goals: take counter payments (cash/cheque/bank transfer) and hand the payer a receipt.
  • Pain points: slow forms when parents queue; wrong-payer mistakes.
  • Frequency: several per day.
  • Permissions: as delegated by org (client-gated; server enforcement (planned)).
  • Needs: payer search/autofill, prefilled amount from invoice, print/share receipt.
  • Restrictions: should not refund without approval (client-gated).
  • Mental model: "cash register."
  • Expected behaviour: under 60 s per payment.

Org Admin

  • Goals: monitor collections, drill into a payment, resolve disputes, reconcile.
  • Pain points: duplicated payment records across modules (see dual-schema issue).
  • Frequency: weekly review.
  • Permissions: same payments.* set.
  • Expected behaviour: payment list filterable; every payment traceable to invoice + receipt.

Parent (forward-looking)

  • Goals: see payment status, get receipts, pay online.
  • Pain points: no self-service today.
  • Restrictions: only own linked children's invoices (privacy boundary (planned)).
  • Expected behaviour: push notification on PaymentProcessed for their invoice.

System actors

  • Gateway (async): calls back / accountant reconciles via PATCH.
  • Event bus: PaymentProcessed / PaymentRefunded → WS broadcast to tenant room; audit logging via global pipeline.