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
BasicFee Structures & Assignment
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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)
- 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
/api/fees/structuresCreate a fee structure
/api/fees/structuresList fee structures (filter by class, year)
/api/fees/structures/:idGet a fee structure with line items
/api/fees/structures/:idUpdate fee structure
/api/fees/structures/:idDeactivate a fee structure
/api/fees/structures/:id/assignBulk-assign a structure to a class/section
Student Fee Accounts
/api/fees/accountsList student fee accounts (filter by class, status, year)
/api/fees/my-fee-accountStudent's own fee account(s)
/api/fees/accounts/student/:studentIdFee accounts for a specific student (parent/student/staff)
/api/fees/accounts/:idGet a student's fee account
/api/fees/accounts/:id/hold-statusFinancial hold check for a student
/api/fees/accounts/:id/waiveApply a waiver or scholarship
/api/fees/accounts/:id/discountApply a percentage or fixed discount (New)
Payments & Receipts
/api/fees/accounts/:id/paymentsRecord a cash/cheque/bank transfer/DD payment
/api/fees/accounts/:id/paymentsPayment history for an account
/api/fees/payments/:id/receiptDownload the payment receipt as a generated PDF (New)
/api/fees/payments/:idVoid a payment (Admin/Accountant)
/api/fees/payments/bulk-reminderSend outstanding-balance reminders to all overdue accounts (New)
Manual UPI/Bank Payments — Updated
/api/fees/payment-settingsGet the school's UPI ID / bank account details
/api/fees/payment-settingsConfigure the school's UPI/bank details (Admin)
/api/fees/payment-settings/qr-uploadUpload the school's UPI QR code image (Admin)
/api/fees/pending-paymentsSubmit a transfer claim with UTR + screenshot (Parent/Student)
/api/fees/pending-paymentsList payment claims awaiting review (Admin/Accountant)
/api/fees/pending-payments/myTrack your own submitted claims (Parent/Student)
/api/fees/pending-payments/:id/approveApprove a claim — creates the FeePayment and updates the ledger
/api/fees/pending-payments/:id/rejectReject a claim with a reason
Per-Course Fee Reminders (Legacy)
/api/fee-reminders/create-or-updateCreate or update a course-level fee reminder for a student
/api/fee-reminders/create-bulkCreate reminders for multiple students at once
/api/fee-reminders/listList reminders with filters (student, course, status)
/api/fee-reminders/mark-paid/:reminderIdMark a reminder paid
/api/fee-reminders/send-due-remindersEmail every student with a due/overdue reminder
/api/fee-reminders/:reminderIdDelete a reminder
/api/fee-reminders/my-remindersStudent's own course-fee reminders
Reconciliation (New)
/api/fees/reconciliation/unmatchedList unmatched transactions
/api/fees/reconciliation/unmatchedLog a transaction for manual review
/api/fees/reconciliation/matchManually match a transaction to a student account
/api/fees/reconciliation/autoAuto-match unmatched transactions by balance amount
Refunds (New)
/api/fees/refundsSubmit a refund request
/api/fees/refunds/myParent/student's own refund requests
/api/fees/refundsList refund requests (staff)
/api/fees/refunds/:id/approveApprove or reject a refund request
/api/fees/refunds/:id/processMark a refund processed and update the ledger
Reports & Analytics
/api/fees/reports/summaryCollection summary — due, paid, waived, outstanding, overdue count, this-month collected
/api/fees/reports/defaultersOverdue accounts with parent contact info
/api/fees/reports/class-wiseClass-wise collection summary
/api/fees/reports/ledger/:studentIdFull merged payment + adjustment ledger (New)
/api/fees/reports/collection-rateOverall collection rate + 6-month trend (New)
/api/fees/reports/grade-wiseGrade-wise collection analytics (New)
/api/fees/reports/payment-methodsPayment method breakdown (New)
Frontend Pages
| Path | Role | Description | Tier |
|---|---|---|---|
| /dashboard/admin/fees | Admin | Fee management dashboard with collection stats and quick links | Basic |
| /dashboard/admin/fees/structures | Admin | Fee structure list, creation, and class/section assignment | Basic |
| /dashboard/admin/fees/accounts | Admin | Student fee account list with outstanding filter | Basic |
| /dashboard/admin/fees/accounts/[id] | Admin | Account detail — ledger, record payment, waive, discount | Basic |
| /dashboard/admin/fees/reports/defaulters | Admin | Overdue accounts report with bulk reminder trigger | Basic |
| /dashboard/admin/fees/reconciliation | Admin | Unmatched transaction queue with manual + auto match (New) | Basic |
| /dashboard/admin/fees/refunds | Admin | Refund request review, approval, and processing (New) | Basic |
| /dashboard/admin/fees/analytics | Admin | Collection rate, grade-wise, payment method analytics (New) | Basic |
| /dashboard/admin/fees/payment-settings | Admin | Configure the school's UPI ID, QR code, and bank details (New) | Basic |
| /dashboard/admin/fees/verify-payments | Admin/Accountant | Review submitted UPI/bank transfer claims, approve or reject (New) | Basic |
| /dashboard/admin/fee-reminders | Admin | Per-course fee reminder list, create, bulk-create (Legacy) | Basic |
| /dashboard/admin/fee-reminders/create | Admin | Create a single course-fee reminder (Legacy) | Basic |
| /dashboard/admin/fee-reminders/bulk-create | Admin | Create course-fee reminders for many students at once (Legacy) | Basic |
| /dashboard/parent/fees | Parent | Per-child fee status, breakdown, payment history, and Pay Fees (submit UPI/bank transfer proof) | Basic |
| /dashboard/parent/fees/refunds | Parent | Submit and track refund requests (New) | Basic |
| /dashboard/student/fees | Student | Own fee account, payment history, and submitted payment claims | Basic |
| /dashboard/student/fees/pay | Student | View 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(parent)/fee-installment(parent)/fee-payments(parent)/fee-refunds(student)/fees(accountant)/fee-accounts(admin)/fee-overview(parent)/fee-reminders(accountant)/fee-reminders