CH 14Basic

Finance & Fee Collection

End-to-end fee management: fee structures, discounts, scholarships, offline and online payment collection, PDF receipts, bank-statement reconciliation, refunds, collection analytics, bulk reminders, and late fee automation. Every feature in this chapter is available on the Basic tier.

Payment Model

No payment gateway is used for fee collection. Offline payments (cash, cheque, bank transfer, DD) are recorded directly by school staff. For remote payments, each school publishes its own UPI ID and bank account details, students/parents transfer money directly to the school, and submit a UTR reference number plus a screenshot as proof — an admin or accountant manually verifies the transfer and approves it, which creates the payment record and updates the ledger. This keeps the full fee amount with the school. (Platform subscription billing — the school's payment to NexusOne — is a separate system and still uses DodoPayments.)

Basic Tier Features

Basic

Fee Structures & Assignment

Basic
  • Grade-specific fee structures with line-item breakdown, per academic year
  • totalAmount auto-calculated from feeItems on every save
  • Bulk-assign a structure to a class/section, creating a StudentFeeAccount per student
  • Admin UI: /dashboard/admin/fees/structures

Discounts, Waivers & Scholarships

Basic
  • PATCH /api/fees/accounts/:id/discount — percentage or fixed discount
  • PATCH /api/fees/accounts/:id/waive — waiver or scholarship, approver tracked
  • Every adjustment is recorded on the account's adjustments[] ledger with type, amount, reason, and approver
  • Admin UI: Apply Discount / Waive Fee cards on the account detail page

Payment Collection & Ledger

Basic
  • Record cash, cheque, bank transfer, or DD payments with method-specific reference fields
  • Unified ledger view merges payments and adjustments chronologically
  • Balance auto-recalculated on every payment via the account's pre-save hook
  • Admin UI: account detail page's Ledger card

PDF Receipts — New

Basic
  • GET /api/fees/payments/:id/receipt streams a generated PDF (pdfkit) — receipt number, fee breakdown, method, collector
  • Access restricted to the paying student, their parent, or school staff
  • Web: download/print from ReceiptView; Mobile: downloads and opens the native share sheet

Manual UPI / Bank Transfer Payments — Updated

Basic
  • No payment gateway involved — each school configures its own UPI ID, QR code, and bank account under Payment Settings
  • Students/parents transfer directly and submit a UTR reference number plus a screenshot as proof (POST /api/fees/pending-payments)
  • Admin/Accountant review the claim under Verify Payments; approving it creates the FeePayment (method: upi) and updates the ledger, rejecting requires a reason
  • Keeps 100% of the fee amount with the school — no gateway cut

Reconciliation Queue — New

Basic
  • Log transactions observed outside NexusOne (e.g. bank statement entries) for manual review
  • POST /api/fees/reconciliation/match links a transaction to a student account and creates the payment
  • POST /api/fees/reconciliation/auto matches unmatched transactions to accounts by exact balance amount
  • Admin UI: /dashboard/admin/fees/reconciliation

Refund Workflow — New

Basic
  • Refund model with a request → approve/reject → process lifecycle
  • Parents can submit and track refund requests for their children; Accountant processes approved refunds
  • Processing pushes a refund adjustment to the ledger and updates the balance
  • Admin UI: /dashboard/admin/fees/refunds · Parent UI: /dashboard/parent/fees/refunds

Financial Analytics — New

Basic
  • Collection rate with a 6-month monthly collection trend
  • Grade-wise collection percentage per class
  • Payment method breakdown (cash/cheque/bank transfer/online/DD)
  • Admin UI: /dashboard/admin/fees/analytics — tables and summary cards, no chart library dependency

Bulk Collection Reminders — New

Basic
  • POST /api/fees/payments/bulk-reminder — reminds every parent with an overdue or past-due balance via WhatsApp/email
  • Each send is logged in FeeCollectionReminder for delivery tracking
  • Admin UI: Send Bulk Reminders button on the Defaulter List report

Late Fee Engine — New

Basic
  • Optional lateFeeRule (fixed, percentage, or daily) configured per FeeStructure
  • Daily cron evaluates overdue accounts and pushes a late_fee adjustment, once per account per day
  • Late fees increase totalDue and flow through the same ledger as discounts and payments

Financial Holds

Basic
  • getFinancialHoldStatus utility flags students overdue 60+ days
  • GET /api/fees/accounts/:id/hold-status exposes the check for other modules (results, certificates, library) to opt into
  • Not force-wired into other chapters — available as a reusable gate

Per-Course Fee Reminders (Legacy)

Basic
  • A separate, older FeeReminder model tracks course-level dues (student + course) rather than the school-wide StudentFeeAccount ledger
  • Status lifecycle: pending, reminded, overdue, paid; email-based reminders
  • Distinct from the newer bulk-reminder/collection-reminder engine above — kept for existing course-fee workflows
  • Admin UI: /dashboard/admin/fee-reminders · Mobile: (parent)/(accountant)/fee-reminders

API Reference — Chapter 14

Fee Structures

POST/api/fees/structures

Create a fee structure

GET/api/fees/structures

List fee structures (filter by class, year)

GET/api/fees/structures/:id

Get a fee structure with line items

PATCH/api/fees/structures/:id

Update fee structure

DELETE/api/fees/structures/:id

Deactivate a fee structure

POST/api/fees/structures/:id/assign

Bulk-assign a structure to a class/section

Student Fee Accounts

GET/api/fees/accounts

List student fee accounts (filter by class, status, year)

GET/api/fees/my-fee-account

Student's own fee account(s)

GET/api/fees/accounts/student/:studentId

Fee accounts for a specific student (parent/student/staff)

GET/api/fees/accounts/:id

Get a student's fee account

GET/api/fees/accounts/:id/hold-status

Financial hold check for a student

PATCH/api/fees/accounts/:id/waive

Apply a waiver or scholarship

PATCH/api/fees/accounts/:id/discount

Apply a percentage or fixed discount (New)

Payments & Receipts

POST/api/fees/accounts/:id/payments

Record a cash/cheque/bank transfer/DD payment

GET/api/fees/accounts/:id/payments

Payment history for an account

GET/api/fees/payments/:id/receipt

Download the payment receipt as a generated PDF (New)

DELETE/api/fees/payments/:id

Void a payment (Admin/Accountant)

POST/api/fees/payments/bulk-reminder

Send outstanding-balance reminders to all overdue accounts (New)

Manual UPI/Bank Payments — Updated

GET/api/fees/payment-settings

Get the school's UPI ID / bank account details

PATCH/api/fees/payment-settings

Configure the school's UPI/bank details (Admin)

POST/api/fees/payment-settings/qr-upload

Upload the school's UPI QR code image (Admin)

POST/api/fees/pending-payments

Submit a transfer claim with UTR + screenshot (Parent/Student)

GET/api/fees/pending-payments

List payment claims awaiting review (Admin/Accountant)

GET/api/fees/pending-payments/my

Track your own submitted claims (Parent/Student)

PATCH/api/fees/pending-payments/:id/approve

Approve a claim — creates the FeePayment and updates the ledger

PATCH/api/fees/pending-payments/:id/reject

Reject a claim with a reason

Per-Course Fee Reminders (Legacy)

POST/api/fee-reminders/create-or-update

Create or update a course-level fee reminder for a student

POST/api/fee-reminders/create-bulk

Create reminders for multiple students at once

GET/api/fee-reminders/list

List reminders with filters (student, course, status)

PUT/api/fee-reminders/mark-paid/:reminderId

Mark a reminder paid

POST/api/fee-reminders/send-due-reminders

Email every student with a due/overdue reminder

DELETE/api/fee-reminders/:reminderId

Delete a reminder

GET/api/fee-reminders/my-reminders

Student's own course-fee reminders

Reconciliation (New)

GET/api/fees/reconciliation/unmatched

List unmatched transactions

POST/api/fees/reconciliation/unmatched

Log a transaction for manual review

POST/api/fees/reconciliation/match

Manually match a transaction to a student account

POST/api/fees/reconciliation/auto

Auto-match unmatched transactions by balance amount

Refunds (New)

POST/api/fees/refunds

Submit a refund request

GET/api/fees/refunds/my

Parent/student's own refund requests

GET/api/fees/refunds

List refund requests (staff)

PUT/api/fees/refunds/:id/approve

Approve or reject a refund request

PUT/api/fees/refunds/:id/process

Mark a refund processed and update the ledger

Reports & Analytics

GET/api/fees/reports/summary

Collection summary — due, paid, waived, outstanding, overdue count, this-month collected

GET/api/fees/reports/defaulters

Overdue accounts with parent contact info

GET/api/fees/reports/class-wise

Class-wise collection summary

GET/api/fees/reports/ledger/:studentId

Full merged payment + adjustment ledger (New)

GET/api/fees/reports/collection-rate

Overall collection rate + 6-month trend (New)

GET/api/fees/reports/grade-wise

Grade-wise collection analytics (New)

GET/api/fees/reports/payment-methods

Payment method breakdown (New)

Frontend Pages

PathRoleDescriptionTier
/dashboard/admin/feesAdminFee management dashboard with collection stats and quick linksBasic
/dashboard/admin/fees/structuresAdminFee structure list, creation, and class/section assignmentBasic
/dashboard/admin/fees/accountsAdminStudent fee account list with outstanding filterBasic
/dashboard/admin/fees/accounts/[id]AdminAccount detail — ledger, record payment, waive, discountBasic
/dashboard/admin/fees/reports/defaultersAdminOverdue accounts report with bulk reminder triggerBasic
/dashboard/admin/fees/reconciliationAdminUnmatched transaction queue with manual + auto match (New)Basic
/dashboard/admin/fees/refundsAdminRefund request review, approval, and processing (New)Basic
/dashboard/admin/fees/analyticsAdminCollection rate, grade-wise, payment method analytics (New)Basic
/dashboard/admin/fees/payment-settingsAdminConfigure the school's UPI ID, QR code, and bank details (New)Basic
/dashboard/admin/fees/verify-paymentsAdmin/AccountantReview submitted UPI/bank transfer claims, approve or reject (New)Basic
/dashboard/admin/fee-remindersAdminPer-course fee reminder list, create, bulk-create (Legacy)Basic
/dashboard/admin/fee-reminders/createAdminCreate a single course-fee reminder (Legacy)Basic
/dashboard/admin/fee-reminders/bulk-createAdminCreate course-fee reminders for many students at once (Legacy)Basic
/dashboard/parent/feesParentPer-child fee status, breakdown, payment history, and Pay Fees (submit UPI/bank transfer proof)Basic
/dashboard/parent/fees/refundsParentSubmit and track refund requests (New)Basic
/dashboard/student/feesStudentOwn fee account, payment history, and submitted payment claimsBasic
/dashboard/student/fees/payStudentView school's UPI/bank details and submit transfer proof for verification (Updated)Basic

Mobile Screens

Mobile still reflects the DodoPayments checkout flow below — migrating these screens to the manual UPI/bank transfer flow (proof upload + verification queue) is planned as a follow-up.

(parent)/fees
Per-child fee dashboard with balance, breakdown, Pay Now (New)
Basic
(parent)/fee-installment
Amount entry and DodoPayments checkout handoff (New)
Basic
(parent)/fee-payments
Payment history with receipt download + share sheet (New)
Basic
(parent)/fee-refunds
Submit and track refund requests (New)
Basic
(student)/fees
Own fee account with online Pay Now (New)
Basic
(accountant)/fee-accounts
Fee account list with offline payment recording (New)
Basic
(admin)/fee-overview
Per-course fee reminder overview with pending/overdue summary (Legacy)
Basic
(parent)/fee-reminders
Parent-facing per-course fee reminder list (Legacy)
Basic
(accountant)/fee-reminders
Accountant per-course fee reminder management (Legacy)
Basic