Skip to main content
Schoolyi
School librarian arranging books and planning cards in a bright library

Browse docs

Fees & finance

Fees setup workflow

The one-off order of work that has to be finished before a school takes its first payment: fee types, structures, the installment schedule, penalties and reminders, then generation and a verification pass.

Fees & finance guide for day and boarding schools.

Last updated August 29, 2026

When to do this, and who does it

This is a go-live and start-of-year job, not a daily one. Work through it after the academic year, the calendar and the class list exist, and finish it before the counter opens for the term you are billing. The whole sequence is owned by one person with fee operations access - Platform Admin, Principal, Vice Principal, Support Staff - Finance or Admin - except the last step, which needs a server administrator with shell access. Nobody outside those roles sees any of these screens, and families see only the invoices that come out of the end.

Treat the order as a dependency chain rather than a checklist. A structure needs its fee type. Late-fee, tax and reminder settings should be saved before the first invoices exist, so the first overdue cycle behaves like every later one. Generation comes last because a fee instance copies the amount and due date from the structure and then stops looking at it, so an invoice created against a wrong structure stays wrong after the structure is corrected.

Prerequisites

  • An active academic year with start and end dates at /academic-year, because a structure belongs to a year and an installment due date is derived from the year start when the structure has none.
  • Classes with students actively enrolled at /classes and /students. Generation matches the class a student is enrolled in first and only falls back to grade and section.
  • SMTP configured and passing /settings/email-test, since receipt email and every dunning email from the second step onwards use it.
  • A decision on the checkout mode, because FEES_ONLINE_PAYMENT_MODE and its NEXT_PUBLIC_ mirror are environment variables and changing them later needs a redeploy.

The sequence

  1. Create fee types at /fees/fee-types - tuition, admission, lab, activity. Create the code TRN now if the school runs buses, because transport looks up that exact code and silently creates nothing when it is absent.
  2. Build structures at /fees/fee-structures - amount, installment count, first due date and grace days, per class or per grade, for the active year.
  3. Check the installment schedule at /fees/fee-schedule. The grid of types against grades is where a missing or duplicated structure shows up; editing remains role-gated on the same canonical screen.
  4. Configure the settings: /fees/settings/late-fees for the penalty, /fees/settings/gst or /fees/settings/vat for tax lines, /fees/settings/dunning for the reminder ladder.
  5. Generate at /fees/bulk-generate, or per class from /fees/setup. Start with one class. Generation is per student and only fills gaps, so re-running it later for new admissions is safe.
  6. Verify /fees/class-summary against the published fee circular, then open a single student ledger to confirm the installment dates, before letting anyone take payment.
  7. Have a server administrator schedule scripts/run-school-cron.sh daily with FEES_CRON_SECRET and BASE_URL set, then confirm the fees.dunning heartbeat on /ops.

What goes wrong when the order slips

MistakeWhat you seeWhat it costs
Generating before the amounts are finalLive invoices on /fees/me that disagree with the fee circularEditing or deleting instances one by one; paid ones need a refund with a second approver
No fee type with the code TRN before transport assignmentsRiders have no transport lines and nothing was reported as failingCreate TRN, then re-assign the affected riders
Changing the installment count after generatingTwo shapes of invoice in the same yearThe old split stays until those instances are cleared or removed
Leaving dunning until after the first due dateThe first overdue cycle is chased differently from later onesLow, but families notice the inconsistency
Never scheduling the daily jobNo reminder ever sent; dunning columns on /fees/defaulters stay emptyReputational rather than technical - the ladder does not backfill missed steps

Limits worth knowing before you start

  • No discount rules engine. Sibling and staff-ward concessions are labels on a hand-entered waiver that a second person approves; nothing is derived from family relationships or staff status.
  • The late fee is advisory. It is shown at the counter as the amount due if the family paid today and is never posted to the fee instance.
  • Multi-installment structures split the amount evenly and space due dates evenly across the year.
  • Fee types and structures carry no school id, so a deployment holding more than one school shares one fee catalogue.

Common questions

Quick answers in plain language.

Can I change a fee amount after bulk generation has already run?+

You can change the structure, but it will not touch invoices that already exist. A fee instance stores its own amount and due date at creation and never re-reads the structure, so the change applies only to instances generated afterwards. Correcting existing lines is per-instance work, and any that were already paid need a refund first.

Do I need to configure GST or VAT if the school does not charge tax on fees?+

No. Both are off by default - GST at a zero rate with an INV prefix, VAT off at 5% in AED with a TAX prefix - and receipts print without a tax line. Enable only the one that applies to the jurisdiction, since each keeps its own invoice number series and its own registration number on the document.

Is it safe to run bulk generate a second time later in the year?+

Yes. Generation works student by student and skips any structure and installment combination that already has an instance, so a repeat run only fills gaps. That is the intended way to pick up mid-year admissions, students who were missing a class enrolment on the first pass, or a structure added after the first run.

What is the correct order to set up fees in Schoolyi?+

Create fee types at /fees/fee-types, structures at /fees/fee-structures, installment schedule at /fees/fee-schedule, then late fees, GST, and dunning under /fees/settings. Run bulk generate at /fees/bulk-generate before opening collection.

Do fees autopay and dunning run automatically?+

No — schedule scripts/run-school-cron.sh daily with FEES_CRON_SECRET. Autopay hits POST /api/fees/autopay/run-due; dunning uses POST /api/fees/dunning/run after preview at /fees/settings/dunning.

Related searches

School leaders and IT teams often search for: how to fees setup workflow in school management software, best fee management software for K-12 schools, Schoolyi fees setup workflow guide, fees setup workflow step by step, online fee collection software, school billing software, and fee receipt software schools.