HandbookPeople & money20

Finance, fees & accounting.

A school's money flows through five channels every day: fees billed to families, payments collected by the cashier, expenses paid to suppliers, payroll settled to staff, and the ledger that ties it all together. YESS owns every channel. This handbook walks you through each one — from the bursar opening the first fee structure to the owner reading the P&L on Friday afternoon. By the time you close this book, you will know which screen to open for every money question the school asks.

  • 35finance routes
  • 7actor types
  • 11chapters
  • ≈22 minto read

Prologue

A note on this book and the money#

Money is the most audited thing in any school. A parent disputing an invoice, a government auditor asking for a trial balance, a sponsor wanting to see scholarship impact — every one of them will land on a screen in this handbook. YESS was built so that every one of those conversations can be answered from a single source of truth, in any currency, in any of three languages, without a spreadsheet in sight.

The finance module is deliberately layered. An accountant at a small school can get by with fee structures, invoices, and the payment log. A larger institution can turn on double-entry accounting, the general ledger, bank reconciliation, and VAT reporting. The chapters below move from the simplest layer to the most complete; stop wherever matches your school.

Every franc the school touches, in one place, with a full audit trail.

Chapter one

A morning in the bursary#

It is 08:15 at Greenwood International Academy. Follow this morning end to end and the rest of the book is just detail.

08:15. The bursar opens the Fees hub at /dashboard/fees. The school runs on two fee structures — Junior Secondary and Senior Secondary — each with four components (tuition, transport, ICT levy, and a per-term activity fee). Both structures were built in the previous term and are already assigned to their programmes. She glances at the gold KPI rail: 2 structures · 4 components · 2 active · 2 assigned. Everything looks right for the new term.

08:22. A parent walks in with her daughter who enrolled yesterday. The bursar opens /dashboard/invoices/all, clicks Generate Invoice, selects the student, chooses the Senior Secondary fee structure, sets the due date, and clicks Generate. The system produces invoice INV-2026-0441: total ₦185,000, status Draft, four line items matching the structure's components.

08:29. The parent pays the first installment in cash — ₦60,000. The bursar opens /dashboard/payments/record, selects the invoice, enters ₦60,000, method Cash, and clicks Record. The invoice status shifts to Partially Paid; balance ₦125,000. The general ledger records a debit to Cash on Hand (1100) and a credit to Tuition Revenue (4100). A WhatsApp receipt is dispatched to the parent's phone in Yoruba.

09:10. The principal opens the owner portal on her tablet. The financial overview shows the term's collection rate: 74% — higher than this time last year. She sees three overdue invoices in the gold KPI strip and forwards the list to the bursar with a note.

09:30. A scholarship committee meeting. Three students are awarded the Academic Excellence Scholarship (25% off tuition). The registrar opens /dashboard/fees/scholarships, assigns all three. For each one, YESS automatically applies the discount to their open invoice — total ₦185,000 becomes ₦138,750; the ledger books the revenue reduction immediately.

Chapter two

Building the fee catalogue#

Before YESS can generate a single invoice it needs to know what the school charges. Fee structures are the answer: they are named containers that hold fee components and are assigned to programmes or classes. Once a structure is active and assigned, generating an invoice for any student in that programme takes one click.

The fee catalogue lives at /dashboard/fees — a hub of three sections: Fee setup (structures and components), Reductions & aid (discounts and scholarships), and Collection (payment schedules).

The five building blocks

  1. 01

    Fee structures

    A structure is assigned to a programme (e.g. JSS, SSS) or a specific class. One structure per assignment — the system rejects duplicates. Status Active means the structure is in use and invoices can be generated from it.

  2. 02

    Fee components

    Each component carries a name, amount, and payment frequency (once, monthly, per-term). Mark a component mandatory so it always appears; mark it optional so the cashier can remove it for partial enrolments.

  3. 03

    Payment schedules

    Attach a schedule to a structure to split the total into named instalments with due dates. When a parent requests a payment plan, this schedule is the default template.

  4. 04

    Discounts

    School-wide reductions — early-payment discount, sibling discount, staff-child concession. Set as a percentage or fixed amount. Discounts apply to invoices automatically when the trigger condition is met.

  5. 05

    Scholarships

    Named aid programmes with a percentage or fixed-amount benefit. Awarding a scholarship immediately reduces the recipient's open invoice and records the revenue adjustment in the general ledger.

Chapter three

The invoice lifecycle#

An invoice is a formal demand for payment. In YESS it carries a student, a due date, a set of line items, and a status that moves from Draft → Sent → Partially Paid → Paid (or Overdue, Cancelled, or Voided). The invoice hub lives at /dashboard/invoices and has four sub-surfaces: All invoices, Bulk generation, Overdue & reminders, and Credit notes.

Generating invoices

Two paths: single — pick a student, pick a fee structure, set a due date, click Generate. The system fills in the line items from the structure's components, computes the total, and status is Draft. Bulk — paste a list of student UUIDs (or use the class filter coming in a future release), pick a structure, click Generate. Hundreds of invoices in seconds.

Once generated, click Mark as Sent to move the invoice from Draft to Sent. The parent's portal immediately shows the invoice under Invoices.

Overdue & reminders

The Overdue tab at /dashboard/invoices/overdue shows every unpaid invoice past its due date, sorted oldest-first, with a days-overdue counter. One click flags an invoice as Overdue (shifts the status and colours the parent portal's summary red); another sends a reminder notification in the parent's preferred language.

Credit notes

A credit note is issued when a school owes money back to a family — an overpayment, a withdrawal mid-term, a billing correction. Open /dashboard/invoices/credits, click Issue Credit Note, attach it to the original invoice, enter the amount and reason.

Two outcomes: Applied — the credit offsets the student's outstanding balance; the invoice total drops immediately and the ledger books the adjustment. Refunded — cash leaves the school; the ledger records a debit to revenue and a credit to the bank account.

Chapter four

Recording and reconciling payments#

The payments hub at /dashboard/payments has five surfaces. Most schools use Record and History every day; Online, Reconcile, and Plans come into daily use once the school scales.

Record payment

Open /dashboard/payments/record. Select the student's invoice (the balance auto-fills), enter the amount received, choose the method — Cash, Bank transfer, MTN Mobile Money, Orange Money, Cheque, or Stripe — and enter any reference number. Click Record. The invoice balance updates atomically; the ledger posts Dr cash / Cr revenue in the same transaction. A receipt is dispatched to the parent.

Online payment requests

Open /dashboard/payments/online. Create a payment request for a student's invoice; the system generates a secure link via Notchpay, CamPay, or Stripe. Share the link by SMS or WhatsApp. When the parent pays, the system records the payment automatically.

Payment plans

A family that cannot pay in full requests an instalment plan from the parent portal. The request arrives in /dashboard/payments/plans. The bursar reviews the request, approves or rejects it with a reason. On approval, the system generates the instalment schedule automatically. When an instalment is marked paid, YESS records the payment against the invoice — same chain as a direct payment, same ledger posting.

Reconciliation

At the end of each banking day, open /dashboard/payments/reconcile. Compare the declared cash against the system's expected takings. If the variance is zero, mark the shift reconciled. If there is a difference, flag it as Disputed and enter a note — the accountant will investigate. The reconciliation record is permanent and immutable.

Chapter five

The cashier's till#

Every point-of-sale in YESS — the canteen counter, the school shop, the library fine desk — works through a cashier shift. The cashier opens the till at the start of their session with an opening float; the system tracks every sale; the cashier declares their closing cash at the end; YESS computes the expected takings and surfaces any variance.

The accountant's view lives at /dashboard/finance/cashier-shifts. The KPI strip shows pending variances, open shifts, total shortage, and reconciled count. The filter buttons narrow to the queue that needs attention: variance shifts first, then closed-pending-reconcile.

Reconciling a shift takes thirty seconds: open the shift row, enter reconciliation notes, choose Reconciled or Disputed, click Confirm. A disputed shift creates a flag for the finance manager to investigate — the shift cannot be deleted until the flag is resolved.

Chapter six

Tracking and approving expenses#

All money that leaves the school — whether it's diesel for the generator, caterer invoices, or stationery for the admin office — is recorded in the expense module at /dashboard/expenses. Expenses have a category, a vendor, a payment method, and a status lifecycle: Draft → Pending approval → Approved → Paid.

The expense log at /dashboard/expenses/log is where expenses are created. Any staff member with the finance_expenses.create permission can log an expense; it lands in Draft. The finance manager or principal opens the Pending Approval filter and either approves or rejects it with a reason.

Vendors are managed at /dashboard/expenses/vendors — name, contact, payment terms. Categories at /dashboard/expenses/categories — use the chart-of-accounts codes to link categories to GL accounts for automatic ledger posting when the expense is approved.

The Analytics tab at /dashboard/expenses/analytics shows a category breakdown pie chart and a month-by-month trend bar. Useful for budget review meetings.

Chapter seven

The double-entry ledger#

YESS implements a full double-entry general ledger. Every financial event — a fee payment, a scholarship discount, a voided invoice, a canteen sale, an approved expense — posts a balanced journal entry automatically. The accountant never needs to post routine entries by hand; manual journals exist for adjustments and audit corrections.

The accounting hub at /dashboard/accounting has five surfaces: Chart of accounts, Journal entries, Bank accounts, Financial statements, and VAT/Tax.

Chart of accounts

Open /dashboard/accounting/chart. YESS seeds a default education-sector chart on first setup — Assets (1xxx), Liabilities (2xxx), Equity (3xxx), Revenue (4xxx), Expenses (5xxx). Add accounts, set their normal balance (debit or credit), and link them to expense categories or fee components. Account balances are computed live from posted journal entries — there is no stored balance column to get out of sync.

Journal entries

View all posted and draft journals at /dashboard/accounting/journal. Every automatic entry (fee receipt, payment void, scholarship, canteen shift) carries a reference type and reference id — drill down to the source transaction in one click. Manual entries require a balanced debit/credit — YESS rejects unbalanced entries before they reach the database.

Financial statements

The statements surface at /dashboard/accounting/statements renders a live P&L and balance sheet from the posted journal entries. Figures update in real time as payments and expenses are recorded. The balance sheet equation (Assets = Liabilities + Equity) is checked on every render — if it doesn't balance, a warning appears.

Chapter eight

Planning and tracking budgets#

Budgets let the school plan spend before the term starts and track it in real time as expenses are approved. The budgets hub at /dashboard/budgets has three surfaces: the budget list, budget lines, and a spend report.

Create a budget for a period (a term, a year) and a department. Add budget lines — one per expense category, each with a planned amount. As expenses are logged and approved under that category, the utilisation bar on the budget line fills up. Lines over 90% turn red; the finance manager receives a notification before the budget is breached.

The budget report at /dashboard/finance-overview/reports overlays planned vs actual spend across all active budgets, exportable to PDF or CSV for board presentations.

Chapter nine

The parent's fee portal#

Every parent with a YESS portal account can see their child's complete financial picture at /portal/fees. The portal has three surfaces: Overview, Transactions, and Plans.

Overview

The overview shows total billed, total paid, outstanding balance, and number of payments — the four numbers a parent asks every term. If there is an overdue balance, a red alert strip appears at the top with the amount and a link to pay.

Transactions

Three sub-views: Invoices (every invoice for this child, with status, amount, and due date), Payments (every payment recorded, with method, date, and reference), and Credits (any credit notes issued for this child). Parents cannot dispute from this screen — disputes are raised by message to the bursar.

Payment plans

A parent who cannot pay in full opens the Plans tab and clicks Request a payment plan. They select the invoice, propose a number of instalments and a start date, and add a note. The request lands in the bursar's payment plans queue for approval or rejection. Once approved, the instalment schedule appears in the parent's portal and the parent can pay each instalment via the online payment link.

Chapter ten

The owner's dashboard#

The school owner — the proprietor or board — has their own portal at /owner/financials. This is not an operational surface; it is a strategic one. The owner does not process invoices; they read the margin.

Six gold KPI tiles answer the six questions every owner asks every week: How much did we collect? What is the net profit? How much is still outstanding? Is our collection rate healthy? How much did we give away in scholarships? Is payroll eating too much of revenue?

Below the KPI strip, four charts provide depth: the P&L trend (area chart, revenue vs expenses vs profit, month by month), the expense breakdown by category (pie), the payroll trend (line), and the fee aging report (how old the unpaid balances are, bucketed into current / 1–30 days / 31–60 / 61–90 / 90+).

The per-student economics panel at the bottom of the page is the number the owner shares at board meetings: revenue per student, cost per student, and profit per student. At a well-run school, all three should be stable or improving term-on-term.

Chapter eleven

What makes the finance module elite#

Six things that make this elite

  1. 01

    Atomic money

    Every payment, void, scholarship, and credit note hits the invoice and the general ledger in the same database transaction. There is no window in which the invoice is updated but the ledger is not — consistency is guaranteed by the database, not by application code.

  2. 02

    Three-language, any-currency receipts

    Every receipt dispatched to a parent is rendered in the parent's preferred language — English, French, or Arabic — and in the school's configured currency. No hardcoded dollar signs; no English-only templates for French-speaking families.

  3. 03

    Scholarship impact in the ledger

    When a scholarship is awarded, YESS applies the discount to the open invoice and posts the revenue reduction to the ledger in the same operation. The P&L reflects the true net revenue the school earned — not the gross amount billed before aid.

  4. 04

    Append-only audit trail

    No journal entry is ever edited or deleted. Voids create reversing entries; every reversal carries the original entry's reference. The trial balance at any point in time is reconstructable from the entry sequence alone.

  5. 05

    Live financial statements

    The P&L and balance sheet are computed from posted journal entries on demand. The balance sheet equation is checked on every render. The accountant never produces a month-end statement — the statement is always current.

  6. 06

    Owner visibility without ops access

    The owner portal gives the proprietor a clear strategic view — margins, collection rate, scholarship impact, payroll ratio — without granting access to individual student records or payment transactions. Governance and privacy in the same screen.

Planned features

What comes next#

The features below are planned for YESS Finance and will be added in upcoming releases. They appear here so you can plan around them.

Seven features coming next

  1. 01

    Atomic payment→invoice trigger

    Today, recording a payment updates the invoice balance via application code. The planned upgrade moves this to a database trigger — a SELECT FOR UPDATE row lock and a SUM recompute — so that two simultaneous payments on the same invoice cannot produce an incorrect balance.

  2. 02

    Expense→GL auto-posting

    When an expense is approved, the planned behaviour is an automatic journal entry: Dr expense-category account / Cr bank or payable. This requires the expense-category→GL-account mapping screen (coming in the budgets release) and a `posted_journal_entry_id` column on the expenses table.

  3. 03

    Wallet completeness

    Student wallets support top-up and spending today. The planned additions are: refund flows (money back to the wallet on order cancellation), adjustment entries, and a parent-facing wallet statement screen. The canteen auto-deduct-from-wallet toggle is configured but not yet consumed.

  4. 04

    Reconciliation persistence

    Bank reconciliation currently shows the numbers but does not yet persist a matched state or bank-statement row. The planned upgrade stores the reconciled transaction list and a PDF export of the reconciliation report.

  5. 05

    Plan status automation

    Payment plans currently stay active until manually closed. The planned scheduler marks plans completed when all instalments are settled and defaulted when an instalment passes its due date by more than the school's configured grace period.

  6. 06

    Multi-currency support

    YESS is used in schools that bill in XAF, NGN, USD, and GHS. The platform_billing_ledger and FX-rate tables are scaffolded. The planned feature adds a school-level base currency, per-invoice currency, and FX conversion on the P&L.

  7. 07

    Invoice auto-generation on enrolment

    When a student completes enrolment, the planned flow automatically generates their first invoice from the assigned fee structure — no bursar action required. The enrolment module already triggers a notification; the invoice generation is the next step.

The full lifecycle

A term, invoice one to close#

Week 1 (term start). Bursar reviews and activates fee structures. Enrolment completes; invoices are generated in bulk. Parent portal opens — every family sees their balance.

Weeks 1–12 (collection). Payments arrive daily — cash at the counter, mobile money from the parent portal, bank transfers from corporate sponsors. Each payment posts to the ledger in real time. The overdue queue grows as due dates pass; the bursar works through it every morning.

Mid-term. Scholarship committee meets; awards are applied; discounts hit the ledger. Payment plan requests arrive from parents who missed the deadline; the bursar reviews and approves instalment schedules.

Week 13 (term close). Bursar runs the collection report — total billed, total collected, outstanding. Accountant reviews the trial balance. Principal presents the P&L to the board at /owner/financials. Budget utilisation for the term is reviewed; next term's budgets are set.

Year-end. Accountant closes the books — posts any year-end adjusting entries, archives the GL, produces the audited financial statements from the YESS statements screen. Auditor gets view-only access to the journal entries and the trial balance.

Adjacent modules

Where finance connects#