HandbookPeople & money49

Fee collections.

Every school is owed money it has not yet collected. Some of it walks up to the counter and pays in cash; some of it is thirty days overdue and needs a gentle reminder; some of it needs to be broken into instalments a family can actually manage. This handbook covers the whole collecting side of fees — the cashier till, the overdue queue, the receivables-aging report, payment plans, and the fee-compliance desk — and is honest about which parts run themselves and which still need a human hand.

  • 5aging buckets
  • 6payment methods
  • 5collection surfaces
  • ≈11 minto read

Prologue

The unpaid side of the ledger#

Billing a family is easy; collecting from them is the hard part. The finance handbook covers how invoices are raised and how a payment posts to the ledger. This book covers what happens in between — the counter where cash is taken, the queue of invoices that have slipped past their due date, the report that ages every unpaid balance, the plan that lets a struggling family pay in steps, and the compliance desk that decides who gets a little grace.

A word on names first, because YESS is precise about them. The /dashboard/collections screen is the cashier till — front-of-house collection at the counter. The arrears work — overdue, aging, reminders, plans, compliance — lives on a handful of adjacent finance screens. This chapter walks both, and points you at the right screen for each job.

Collect with dignity: know exactly who owes what, and offer a way through before you chase.

Chapter one

Money across the counter#

The most direct collection is the one that walks up to the desk. The cashier till at /dashboard/collections is the unified front-of-house surface: a cashier opens a station, searches for a student, and takes a payment. For the fees station it lists the student's outstanding invoices and settles one; for the other stations it takes an ad-hoc line-item charge.

Stations the cashier is trusted with

A till is scoped to stations — the seven counters a school can run: fees, uniform, transport, canteen, shop, library, and other. A cashier only ever sees the stations they have been granted, and those grants are managed on an admin matrix at /dashboard/collections/stations. Granting and revoking are the only ways to change a till's reach — the grant table takes no direct writes, so access is always deliberate and auditable.

Taking the payment

Collecting calls a database function, collect_payment, which checks the cashier is allowed at that station, records the payment, reduces the invoice balance, posts the ledger entry, and returns a receipt number (in the shape RCP-YYMM-XXXXXXXX). The method must be one of six: cash, bank transfer, MTN Mobile Money, Orange Money, cheque, or other. The whole thing is one atomic step — there is no window in which the payment is recorded but the invoice is not reduced.

The till also carries a cashier-shift panel: the cashier opens the till with a float at the start of a session and closes it with a Z-report at the end. Reconciling those shifts — declared versus expected cash — is the accountant's cashier-shift desk covered in the finance handbook.

Chapter two

Seeing exactly what is owed#

You cannot chase what you cannot see. Two screens make the debt legible — one a working queue, one an analytical report.

The overdue queue

The overdue tab at /dashboard/invoices/overdue lists every unpaid invoice past its due date, each with a days-overdue counter and a running outstanding total. One click flags an invoice as overdue (which shifts its status and colours the parent portal's summary). A daily job can also flip past-due invoices to overdue on its own — more on that in the reminders chapter.

The receivables-aging report

The aging report at /dashboard/finance-overview/aging is where the debt gets bucketed by how old it is. It reads a live view of every unpaid invoice line and sorts each balance into one of five ages:

  • Current — not yet due (due date is today or later).
  • 1-30 days — one to thirty days past due.
  • 31-60 days — a month to two months overdue.
  • 61-90 days — the balance that has started to worry you.
  • 90+ days — the debt that needs a decision, not another reminder.

The report renders a stacked aging bar, a chip per bucket, and a drill-down table (student, class, invoice, due date, balance, days-overdue badge). The same view feeds the owner's collections panel on the financials dashboard, so the proprietor reads the same aged debt the bursar works.

Chapter three

Reminders, in the parent's language#

A reminder is the gentlest form of collection. YESS has a real reminder engine at the database layer, and this is the chapter where the handbook is most careful to tell you exactly what is switched on.

When an invoice is issued, a trigger notifies the linked parents automatically ("New fee invoice"), skipping drafts, cancelled invoices, and zero-balance rows. Beyond that, a daily job (run_invoice_fee_reminders) can flip past-due invoices to overdue and send a one-time overdue notice. Reminder notices are rendered in each parent's preferred language — English, French, or Arabic — and fan out across the school's configured reminder channels (by default in-app, email, WhatsApp, and push), timed off a configurable schedule of days before the due date (7, 3, and 1 by default).

Chapter four

A way through with a payment plan#

When a family cannot pay in full, the humane answer is a plan. Payment plans are fully wired end to end, from the parent's request to the final instalment.

The plan lifecycle

  1. 1

    Requested

    A bursar creates a plan against an invoice, or a parent requests one from their fee portal. The plan opens as 'pending' — the parent's request lands with the status already constrained so it cannot skip approval. A plan carries a total, a number of instalments, and a frequency: weekly, biweekly, monthly, or termly.

  2. 2

    Approved

    The bursar approves the plan (status becomes 'active') or rejects it with a reason. On approval, a trigger auto-generates the instalment rows with due dates spaced by the chosen frequency — nobody types the schedule by hand.

  3. 3

    Paid down

    Each instalment is marked paid as the money arrives; marking it paid creates a real payment against the invoice — the same payment→invoice chain as any other collection — and stamps the instalment paid with its date. Instalments can also be waived.

  4. 4

    Completed

    When the last open instalment clears, a trigger flips the whole plan to 'completed' automatically. A plan whose instalment passes its due date shows as overdue on the instalment, and the plan itself can be marked defaulted.

The plans workspace is at /dashboard/payments/plans; parents request and follow their own plans from the fee portal at /portal/fees. A plan is visible to the school's finance staff and to the requesting family — the database restricts a parent to their own children's plans and instalments.

Chapter five

Compliance, and a little grace#

The fee-compliance desk at /dashboard/fees/compliance is the accountability view. It classifies every active student against what they should have paid by now, sorting them into states like unbilled, underbilled, arrears (paid less than the pro-rated amount due so far), and no structure (no fee structure assigned). It is how a bursar answers "who is behind, and why" without a spreadsheet.

Grace is a first-class action here, not a workaround. A school can grant a moratorium to a student — a documented reason, an optional extended-until date, and a flag for whether it is a full waiver. Only one moratorium can be active per student at a time. While a moratorium (or a timeline hold) is in force, the fee-hold check that would otherwise block a report card or transcript stands down for that student, so a family in genuine hardship is not locked out of their child's results over money.

Chapter six

What makes collections humane#

Five things done with care

  1. 1

    One atomic collection

    Every till payment records the payment, reduces the invoice, and posts the ledger entry in a single database function — there is no half-collected state. The receipt number comes back from the same call.

  2. 2

    Debt aged, not just listed

    The receivables-aging report buckets every unpaid balance into current / 1-30 / 31-60 / 61-90 / 90+ from a live view, so you triage by age of debt and put a plan where a reminder would be cruel.

  3. 3

    Plans that run themselves

    Approving a plan generates its instalment schedule automatically; the final instalment closes the plan automatically. The bursar sets the terms once and the arithmetic looks after itself.

  4. 4

    Grace with a paper trail

    A moratorium is a recorded decision — reason, extended-until, waiver flag, one active per student — that stands down the fee-hold on results. Compassion is logged, not improvised.

  5. 5

    The parent's own language

    Invoice and reminder notices render in the parent's preferred language across the school's configured channels, so a French- or Arabic-speaking family is never chased in a language they have to translate.

Planned & honest gaps

What is still to come#

Collection in YESS is strong where the money and the maths are — the till, the aging, the plans, the moratoriums are all real and wired. The softer "chase" layer is where the honest gaps sit.

Four honest gaps

  1. 1

    The overdue 'Remind' button

    On the overdue tab, the per-invoice Remind button currently shows a confirmation toast without dispatching anything. Wiring it to the real reminder function so a bursar can nudge a single family on demand is planned.

  2. 2

    Reminders on by default

    The automated reminder and compliance-alert crons exist but ship off, and the WhatsApp delivery leg is still being wired. Turning these into safe, on-by-default, fully-delivered channels is planned work.

  3. 3

    A dunning / follow-up trail

    There is no dedicated collections follow-up log yet — no place to record 'called the parent Tuesday, promised to pay Friday'. Contact outcomes today live only in the generic finance audit trail and notification history. A proper dunning sequence with logged outcomes is planned.

  4. 4

    Plan default automation

    Instalments show overdue and a plan can be marked defaulted, but the platform does not yet auto-default a plan when an instalment passes a grace period. Automatic default detection is on the roadmap.

Adjacent modules

Where collections connect#

Tutorial

Do it step by step#

Work the collecting side of a term end to end — from cash at the counter to a plan for the family that cannot pay in one go. Five steps, in the order the bursary actually works them.

  1. 1

    Take the money at the till

    Open the cashier till at /dashboard/collections, pick your station, search the student, choose the invoice, enter the amount and method (cash, bank transfer, MTN or Orange Money, cheque), and collect. The invoice is reduced, the ledger is posted, and a receipt number comes back — in one step.

    A cashier only sees the stations they've been granted. Manage those grants on the admin matrix at /dashboard/collections/stations.

  2. 2

    See what is still owed

    Every morning, open /dashboard/invoices/overdue for the working queue, and /dashboard/finance-overview/aging for the aged view — every unpaid balance sorted into current, 1-30, 31-60, 61-90, and 90+ days.
  3. 3

    Nudge, in the family's language

    Enable the daily reminder engine so past-due invoices flip to overdue and a notice goes out in the parent's language across your configured channels, timed 7, 3, and 1 day before the due date. Verify it is switched on — it ships off by default.

    The overdue tab's per-invoice Remind button is a placeholder toast today; rely on the reminder engine, not that button, until it is wired.

  4. 4

    Offer a plan the family can keep

    For a family that cannot pay in one go, create a plan on /dashboard/payments/plans (or approve the one they requested from /portal/fees). Approving it generates the instalment schedule automatically; mark each instalment paid as the money lands, and the last one closes the plan.
  5. 5

    Grant grace where it is due

    On /dashboard/fees/compliance, find the students in genuine arrears and, where hardship is real, grant a moratorium — a reason, an optional extended-until date, and a waiver flag — which stands down the fee-hold on their results while it is in force.

Collected at the counter, aged into buckets, reminded with care, and — where it is needed — given a way through. That is collection worked with dignity.