FEATURE · Student Fee

Every rupee, accounted for. Cash to UPI to Razorpay.

A live payments register that records every fee payment your school accepts — cash at counter, cheque, NEFT, demand draft, UPI, Razorpay online, PayU, Cashfree — with status tracking, bank reconciliation, reversal on cheque bounce, and a per-payment audit trail. The single source of truth for collections, reconciled to invoices and bank statements every day.

BG PICCOZONE

How most Indian schools record payments today

At the fee counter of a CBSE day school in Lucknow, the morning collection looks like this: cash from 22 parents, six cheques drawn on different banks, four NEFT confirmations parents WhatsApp from their banking app, three Razorpay UPI payments that came in overnight, two demand drafts. The counter staff writes each one in a triplicate receipt book, copies the totals into an Excel sheet at lunch, and emails the bank reconciliation columns to the accounts officer in the evening.

By evening, three problems exist. The Razorpay payments are in the gateway dashboard; the bank statement won't show them till tomorrow's settlement. Two cheques have UTRs the staff forgot to write down. One parent's NEFT receipt mentions a wrong amount because their banking app showed ₹12,500 instead of ₹15,200. By Friday, the school has ₹18,000 of unreconciled payments — amounts where the office can't say with certainty whether the parent paid or not.

Payment recording isn't typing in an Excel sheet — it's a workflow with state. Each payment has a method, a reference number, a bank, a status (initiated, succeeded, failed, reversed), an invoice it's settling, a receipt it'll generate. Inkwelly's Fee Payments module makes every payment a first-class record — created, reconciled, reversed if needed, all audit-logged.

Inkwelly Fee Payments list showing cash, cheque, UPI, Razorpay, NEFT and DD payments with status pills, reconciled toggle and reversal indicators
Fee Payments list — every collection mode, every status, reconciled to bank in real time.

How Inkwelly Fee Payments work

The Payments screen at /student-fee/payments lists every payment your school has recorded, with filters for status (FeePaymentStatus enum: INITIATED, SUCCEEDED, FAILED, REVERSED, PENDING), paymentMode (FeePaymentMode enum: CASH, CHEQUE, DD, NEFT, RTGS, IMPS, UPI, CARD, ONLINE_GATEWAY, BANK_TRANSFER, OTHER), reconciled flag (isReconciled), reversal flag (isReversed), and date windows. Each payment carries a unique paymentNumber, the linked invoice(s), the method-specific reference (cheque number, UTR, gateway transaction ID), the bank/source, the amount, the receipt it generated, and full audit metadata.

The form to record a payment is mode-aware. Pick CASH — just amount and date. Pick CHEQUE — cheque number, drawn-on bank, branch, instrument date. Pick UPI — UPI ID, transaction reference. Pick ONLINE_GATEWAY — the system auto-fills from the Razorpay / PayU / Cashfree webhook. The payment is linked to one or more invoices (split-tender supported), discounts and waivers are honoured, the receipt auto-generates, and the linked invoice's outstanding amount updates instantly.

Reconciliation runs as a separate, explicit step. The ReconcilePaymentDialog lets the accounts officer mark a payment as reconciled with the bank statement, with optional UTR/reference matching. Until reconciled, the payment shows as 'Pending Bank Match' on the principal's dashboard. Bounced cheques and failed gateway settlements use the ReversePaymentDialog — the payment flips to REVERSED with reason, the linked invoice's outstanding amount snaps back, and the audit log captures the entire chain.

What the Payments screen handles

  • 11 payment modes — CASH, CHEQUE, DD, NEFT, RTGS, IMPS, UPI, CARD, ONLINE_GATEWAY (Razorpay / PayU / Cashfree), BANK_TRANSFER, OTHER. Every method Indian schools see at the counter.
  • 5 statuses with state machine — INITIATED, PENDING, SUCCEEDED, FAILED, REVERSED. Each transition timestamped and audit-logged. Reversed payments restore the linked invoice's outstanding amount instantly.
  • Reconciliation workflowisReconciled flag on every payment plus a dedicated dialog for marking against bank statement; a Pending Bank Match filter surfaces unreconciled payments for the daily close.
  • Reversal with reasonReversePaymentDialog requires reason and admin role; on bounce, linked cheque status flips to BOUNCED in the same transaction.
  • Refund directly from a paymentCreateRefundDialog opens from any successful payment to start a Refund workflow with the source-payment link preserved.
  • Split-tender payments — one payment can settle multiple installments / invoices proportionally; receipt prints the split clearly.
  • Razorpay / PayU / Cashfree integration — ONLINE_GATEWAY mode auto-fills via webhook; gateway transaction ID, settlement date and gateway charges captured per payment.
  • Multi-tenancy and RBAC — each school's payments isolated; counter staff record but only finance role reconciles or reverses; cancellation chain is server-enforced.

Walkthrough — three views, end to end

BG PICCOZONE
1. Payments list — mode pills, status, reconciled flag, reversed badge, search and date filters.
BG PICCOZONE
2. Reconcile Payment dialog — mark against bank statement, optional UTR matching, audit-stamped.
BG PICCOZONE
3. Reverse Payment dialog — reversal reason required, linked invoice outstanding amount snaps back.

Mode-aware form — CASH to UPI to Razorpay

The payment recording form changes shape based on paymentMode. CASH = amount + date + handed-over-by name. CHEQUE = cheque number, drawn-on bank, branch, instrument date, cheque date — the Cheque module takes over downstream tracking (deposited, cleared, bounced, redeposited). UPI / IMPS / NEFT = UTR or transaction reference + payer name + bank. ONLINE_GATEWAY = auto-filled from the gateway webhook — transaction ID, gateway, settlement date, gateway fee. The audit log captures every field; receipts print only the parent-relevant subset (no internal reference numbers leaked).

Inkwelly payment recording form showing payment mode dropdown switching between cash, cheque, UPI, Razorpay with mode-specific fields
Inkwelly Reconcile Payment dialog with bank statement reference input and matching toggle

Daily reconciliation — one click per match

At end of day, the accounts officer opens the Payments screen with isReconciled=false filter, downloads the bank statement, and matches per-payment. The Reconcile dialog accepts a reference number (UTR for NEFT/IMPS, transaction ID for UPI / gateway, cheque-clearing-line number for cheques), marks the payment reconciled, timestamps with user. Mismatches surface immediately — the accountant doesn't carry yesterday's unreconciled amounts forward. The principal's daily dashboard shows reconciled vs pending counts, broken down by mode.

Reversal on bounce — invoice outstanding snaps back

When a cheque bounces or a gateway settlement fails, the Reverse Payment dialog requires a reason (free-text, min 10 chars) and admin role confirmation. On submit, the payment flips to REVERSED, the linked invoice's outstandingAmount increases by the reversed sum, the receipt is marked invalid (with audit trail) and the Cheque status flips to BOUNCED in the same database transaction. The parent's portal shows the reversal with explanation; the late-fee accrual resumes if applicable. No silent failures, no orphan receipts.

Inkwelly Reverse Payment dialog with reason field and admin confirmation, showing the linked invoice outstanding amount restoration preview
Inkwelly create refund dialog opening from payment detail view with refund type and refund mode picker

Refund directly from a payment

From any SUCCEEDED payment's detail view, click Create Refund. The CreateRefundDialog opens with the payment pre-populated, asks the refund type (FULL / PARTIAL / EXCESS), the refund mode (matching original mode or DIFFERENT), the amount, and a reason. The refund enters the Refunds workflow with the source-payment link preserved — status PENDING → PROCESSING → COMPLETED — with explicit approval gates. The original payment stays SUCCEEDED; the refund creates a separate audit-tracked record.

Pehle har Friday ko bank statement aur fee Excel mil-ke compare karna padta tha — ek-ek line. 60-70 payments mein 3-4 mismatches — do din lagte the find karne mein. Ab Inkwelly ki Reconcile Payment dialog daily 5 minute ka kaam hai. Mismatches usi din pakad lete hain. Razorpay ke webhook se UPI payments auto-record ho jate hain — manual entry ka jhanjhat khatam.
Accounts Officer · Sunrise Public School, Lucknow

Five operations the school office runs daily

1. Counter close. End of day, the counter staff exports the day's CASH payments grouped by hour, with totals, for the cash drop to the bank. 30 seconds.

2. Bank reconciliation. Accounts officer opens isReconciled=false, matches against the morning's bank statement, marks reconciled. 60-90 seconds per payment with the dialog open.

3. Razorpay daily settlement. Filter paymentMode=ONLINE_GATEWAY, paymentDateFrom=today-2, see settlement vs charged amounts — reconciles automatically when the Razorpay webhook posts the settlement event.

4. Bounced cheque handling. Cheque bounces overnight — the Cheque module flags it. The Payments screen surfaces it under isReversed=false plus linked-cheque-status=BOUNCED. Two clicks to reverse, the parent's invoice outstanding restores, late-fee accrues.

5. Quarterly audit prep. Filter paymentDateFrom=quarter start, group by mode, export to PDF — the principal's CA gets a clean per-mode collection report. 5 minutes vs the 4-day archaeology of an Excel-only school.

Common operations on the Payments screen

  • Record a CASH or cheque payment at the counter; receipt auto-generates with all parent-facing fields.
  • Reconcile NEFT and UPI payments to the bank statement with one dialog per payment.
  • Reverse a bounced cheque; the linked invoice snaps back to outstanding, late fees accrue, parent notified.
  • Create a refund directly from a SUCCEEDED payment with the source link preserved.
  • Filter isReconciled=false for the daily bank-match exercise.
  • Filter by paymentMode=ONLINE_GATEWAY to see all gateway payments and reconcile against settlement reports.
  • Bulk-export filtered set as PDF or CSV for CA review or CBSE / Income Tax / GST inspections.
  • View any payment's full chain: source invoice(s), receipt issued, gateway transaction (if applicable), reconciliation status, audit timeline.

See your payments register live in 30 minutes

Bring your last week's bank statement and a sample collection sheet. We'll show you the Payments screen with cash, cheque, UPI, Razorpay flowing in — reconciled, reversed and refunded — with the full audit trail at every step.

Open Student Fee moduleSee Fee InvoicesSee Fee ChequesSee Fee Receipts

Limits, safety and the small print

Payments are immutable once SUCCEEDED. Editing the amount, mode, reference or invoice link of a SUCCEEDED payment is not allowed. The right action is to REVERSE with reason and create a fresh corrected payment. Audit log retains both records.

Reversal requires reason + admin role. Free-text minimum 10 characters; admin role from IAM. The linked invoice's outstanding amount restores in the same DB transaction, the Receipt is marked invalid, and the linked Cheque (if any) flips to BOUNCED.

Reconciliation is non-destructive. Marking a payment reconciled doesn't change its amount or status — it just sets isReconciled=true with timestamp and user. Un-reconciling is allowed (with audit trail) for the rare case where the bank reverses a settlement.

Gateway integrations are webhook-driven. Razorpay, PayU, Cashfree post webhooks for payment.captured, payment.failed, refund.processed events. Inkwelly verifies the webhook signature server-side and updates the payment record. Manual entry is also supported for offline gateway scenarios.

Multi-tenant isolation. Each school's payments live in an isolated tenant boundary. School A's UPI payment is invisible to School B even within the same trust.

DPDP Act 2023 alignment. Payment records contain student PII (name, admission number) and parent payment instrument data (last-4 cheque number, UPI ID, masked bank account). Encrypted at rest with AES-256 on Mumbai-region servers; accessible only via IAM-controlled roles. Audit log records every payment, reconciliation, reversal and refund — with user, timestamp and IP. CBSE / Income Tax / GST inspection answers from a single export.

Belongs to

1 module

Frequently asked

9 questions
Which payment modes does Inkwelly support out of the box?

Eleven: CASH, CHEQUE, DD (demand draft), NEFT, RTGS, IMPS, UPI, CARD, ONLINE_GATEWAY ([Razorpay](/features/razorpay-integration) / PayU / Cashfree), BANK_TRANSFER, OTHER. Each mode has a dedicated form layout with the right fields (cheque number for CHEQUE, UTR for NEFT, transaction ID for UPI, etc.) and the right downstream workflow. Cheques additionally feed the dedicated [Cheque module](/features/fee-cheques) for deposit → clear / bounce → redeposit tracking.

How does reconciliation work — do we have to match each payment manually?

Each payment is reconciled with one dialog click — type the bank reference / UTR, mark reconciled. The system tracks `isReconciled` separately from payment status. The accounts officer's daily routine: open the Payments screen, filter `isReconciled=false`, download the bank statement, mark per match. For Razorpay / PayU / Cashfree, the gateway webhook auto-fills the settlement reference and reconciles silently — no manual matching needed for online payments.

What happens when a cheque bounces?

The cheque module flags the cheque as BOUNCED with bank reason. The Payments screen automatically surfaces this on the linked payment. The Reverse Payment dialog requires a reason (free-text, min 10 chars) and admin role confirmation. On submit, the payment flips to REVERSED, the linked invoice's outstanding amount restores in the same database transaction, the receipt is marked invalid (audit-trailed), and the parent gets a portal notification. Late-fee accrual resumes from the original due date.

Can we record a partial payment that settles multiple installments?

Yes — one payment can be split-tendered across multiple invoices/installments proportionally. The receipt prints the split clearly: 'Q1 ₹5,000, Q2 ₹5,000 = Total ₹10,000'. Each linked invoice updates its `outstandingAmount` and `status` independently. Audit log records the split and the source payment as a single record with multiple invoice links.

How do online payments via Razorpay / PayU / Cashfree get recorded?

Webhook-driven. The gateway posts events (payment.captured, payment.failed, refund.processed); Inkwelly verifies the signature server-side, creates / updates the payment record automatically, generates the receipt, and updates the linked invoice. The payment carries the gateway transaction ID, settlement date, gateway charges, and the auto-fill reconciles when the settlement event arrives. Manual entry is supported for fallback scenarios.

Can we initiate a refund directly from a payment?

Yes. From any SUCCEEDED payment's detail view, click Create Refund. The dialog asks refund type (FULL / PARTIAL / EXCESS), refund mode, amount, reason. The refund enters the [Refunds](/features/fee-refunds) workflow with the source-payment link preserved, runs through PENDING → PROCESSING → COMPLETED with explicit approval. The original payment stays SUCCEEDED; the refund is a separate audit-tracked record. Useful for withdrawal refunds, bounced-cheque-but-already-issued-receipt cases, and overpayment corrections.

Who in our office can record vs reverse vs refund payments?

By default, role-based via [IAM](/modules/identity-access-management). Counter / fee-cashier role: can RECORD payments, generate receipts, but cannot REVERSE or initiate REFUNDS. Accounts-officer role: can RECONCILE and initiate REVERSAL with reason. Admin / principal role: can approve refunds. The chain is enforced server-side; UI adapts per role to hide unavailable actions.

What audit information is captured per payment?

Per payment: created at + by + IP; mode-specific fields; linked invoice(s); receipt link; gateway transaction details (if applicable); status transitions with timestamps; reconciliation timestamp + user + reference; reversal timestamp + user + reason + IP; refund chain link (if applicable). Audit log is exportable PDF / CSV per payment or in bulk for CBSE / Income Tax / GST inspections.

Is the payment data secure and compliant?

All Inkwelly data hosted on Mumbai-region servers, AES-256 at rest, TLS 1.3 in transit. PII (parent name, masked bank account, UPI ID, cheque number) accessible only via [IAM roles](/modules/identity-access-management). Multi-tenant isolation guarantees one school's payments are invisible to another. DPDP Act 2023 compliant including parental consent for minor PII processing and audit-trail retention as required by Income Tax Act and GST Act.

You might also like

2 reads

See Inkwelly on your school

30-minute demo. We open your current ERP with you and load your data into Inkwelly on the call. Dated go-live plan by the end of it.

Fee Payments Management · Inkwelly Student Fee