Skip to content

Fees

Fee structures are assigned to students, payments are collected at the desk or online, and every payment gets a printable receipt.

Money model

  • Amounts are integer paise everywhere.
  • Charged = assigned structure lines − discount + unwaived fines.
  • Outstanding = charged − completed payments + approved refunds.
  • A cancelled payment is void. An approved refund reduces revenue but not what the drawer received.

Collecting

Staff record desk payments (cash, UPI, card, cheque) against a student. Learners and guardians can pay dues online from the portal.

Online payments go to the institution

Each institution connects its own Razorpay account in Fees → Settings (fees managers only). Money settles into the institution's bank account. Kwilo is never in the funds flow, and ERP payments can't fall back to Kwilo's own B2C keys.

  • The key secret is encrypted at rest (AES-256-GCM) and never returned, logged or written to audit.
  • If an institution hasn't connected Razorpay, the portal says: "Online payments are not set up for your school. Pay at the school office."

Receipts

Every desk and online payment has a receipt. Staff and payers see the same document: letterhead from the institution record, receipt number and date, student and admission number, the structure paid towards, mode and reference, amount in figures and in Indian-system words ("Rupees Thirty Thousand Only"), who received it, and a CANCELLED watermark when voided. Printing uses the browser, so Save as PDF works everywhere.

A part payment can be split across fee heads at the desk, and the receipt then lists each head paid (see splitting a payment by fee head).

Reports and overview

In build. A report builder over collections and dues, filterable by period, mode, cohort, structure and head, with CSV and PDF export, plus an overview dashboard:

  • KPIs: collected today, collected this month, outstanding, collection efficiency, fully paid / partial / unpaid counts
  • Charts: collection trend, payment status, collection by mode, outstanding by cohort, ageing (0-30, 31-60, 61-90, 90+ days)

Reports key off paid_on, the date money was received, not when the row was keyed in. Head-level figures are apportioned from lump-sum payments and labelled as such. The dimension list only offers what the tenant has data for, so an engineering college never sees an empty Class filter.

Where it lives

  • Web: apps/web/src/erp/pages/ErpFeesPage, ErpFeeReceiptPage, ErpStudentFeesCard
  • Backend: apps/backend/src/erp/fees/, apps/backend/src/erp/portal/