Refunds, processed correctly. Approved, paid, audit-stamped.
A dedicated refunds workflow with explicit approval gates: PENDING → PROCESSING → COMPLETED (or FAILED / CANCELLED), refund-type and refund-mode tracking, source-payment / source-receipt links preserved, and a per-refund audit trail. Triggers automatically from withdrawal proration, excess-payment detection and cancelled receipts; processed by finance role with a transparent paper trail for the parent and the auditor.

How most Indian schools process refunds today
A Class 6 student withdraws on November 15th. The school's refund policy says: refund the unused portion of Tuition (8 months remaining out of 12), keep Admission Fee non-refundable, keep Identity Card non-refundable, refund 50% of Annual Day if not yet held. The accountant opens the parent's fee receipts, the invoices, the refund policies document, and a calculator. Twenty minutes later, a refund proposal is on paper. Twenty minutes after that, the principal questions one number. Forty-five minutes total before the cheque is even drawn.
Meanwhile, an excess-payment from a different parent (paid ₹18,000 instead of ₹15,200 by mistake) sits as 'parent credit' in the accountant's notebook waiting to be refunded — nobody has time to process it, the parent calls every week. A bounced cheque from last month means the school issued a receipt and showed the invoice PAID, but the money never came; the parent now wants the receipt cancelled and the refund issued.
Refunds are a workflow with money and trust. Get them slow, the parent loses trust. Get them wrong, the auditor flags it. Get them silent, the school gets sued. Inkwelly's Fee Refunds module makes every refund a structured, status-tracked record — with explicit approval gates, refund-mode tracking, source-payment links and a transparent timeline parents can see on their portal.

How Inkwelly Fee Refunds work
The Refunds screen at /student-fee/refunds lists every refund record with filters for status (FeeRefundStatus enum: PENDING / PROCESSING / COMPLETED / FAILED / CANCELLED), refundType (FeeRefundType enum: WITHDRAWAL / EXCESS / BOUNCED / OTHER), refundMode (FeeRefundMode enum: CASH / CHEQUE / NEFT / UPI / CARD / GATEWAY_REVERSAL / BANK_TRANSFER), and date windows. Each refund has a unique refundNumber, the source-payment / source-receipt links preserved, the refund amount and net amount (after deductions), and full audit metadata.
Refunds enter the system three ways. From a payment: from any successful Payment's detail page, click Create Refund — the dialog asks refund type, refund mode, amount, reason. From a withdrawal: when a student is marked withdrawn, the withdrawal flow auto-computes the refundable amount based on the refund policy attached to the school's fee structures and emits a draft refund. From a cancelled receipt: when a receipt is cancelled, if money has been collected, the refund workflow opens automatically with the source-receipt link.
Every refund runs through PENDING (created, awaiting approval) → PROCESSING (approved, payment in flight) → COMPLETED (money returned, audit-stamped) or FAILED (gateway/cheque rejected, with reason) or CANCELLED (admin overrode). The ProcessRefundDialog lets the finance role advance status, capture the actual refund-mode reference (cheque number / UTR / gateway refund ID), and timestamp completion. The CancelRefundDialog lets admin role cancel a pending refund with reason. Parents see refund status on their portal in real time.
What the Refunds screen handles
- 5 statuses with state machine — PENDING → PROCESSING → COMPLETED, with FAILED and CANCELLED as terminal exits. Each transition timestamped and audit-logged.
- 4 refund types — WITHDRAWAL (student left mid-session), EXCESS (overpayment), BOUNCED (cheque bounce caused receipt cancellation), OTHER (admin discretion).
- 7 refund modes — CASH, CHEQUE, NEFT, UPI, CARD, GATEWAY_REVERSAL (Razorpay / PayU / Cashfree refund.processed event), BANK_TRANSFER. Match the parent's original payment mode or pick a different mode (with reason).
- Source links preserved — every refund records the source payment and source receipt it relates to. Click through to see the full chain.
- Approval gates — finance role advances PENDING → PROCESSING; admin role can CANCEL or override. Configurable via IAM.
- Net amount tracking — refund amount minus any deductions (admin fee, gateway charge, late-fee adjustments) tracked separately so the parent sees gross + deductions + net.
- Auto-trigger from withdrawal / cancellation — student withdrawal, receipt cancellation, payment reversal all auto-emit a draft refund — the finance team only approves and processes.
- Per-refund detail and timeline — reason, source-payment link, source-receipt link, status transitions with users + timestamps, refund-mode reference, parent communication log.
Walkthrough — three views, end to end



Withdrawal proration — auto-computed at withdrawal time
When a student is marked withdrawn from the Student Information module, the withdrawal flow reads the student's enrolled fee group, the refund policy attached, and computes the refundable amount per fee head based on isRefundable flag and the proration method. Refundable Tuition prorates; non-refundable Admission and Identity Card skip; refundable Annual Day prorates if the event hasn't happened. A draft refund of type WITHDRAWAL emits with the line-by-line breakdown for the finance team to review and process.


ProcessRefundDialog — status advance with reference
When the finance team is ready to disburse, they click Process on the PENDING refund. The dialog asks for the actual refund-mode reference: cheque number for CHEQUE mode, UTR for NEFT, transaction ID for UPI / gateway. Status advances PENDING → PROCESSING. When the disbursement confirms (cheque cleared / NEFT successful / gateway refund.processed webhook), status flips COMPLETED with timestamp. Failed disbursements (gateway rejection, NEFT bounce) flip FAILED with reason and admin reviews.
Gateway reversal — one-click for online payments
When the source payment was via Razorpay / PayU / Cashfree (mode = ONLINE_GATEWAY), the refund mode GATEWAY_REVERSAL becomes available. The system calls the gateway's refund API directly, the gateway processes the refund to the parent's original payment instrument, and the refund.processed webhook updates the refund status to COMPLETED. Refund settlement times depend on the gateway and bank — typically 2-7 business days for UPI / NEFT settlement back to the parent.

“Pichle saal hum withdrawal refunds 2-3 hafte mein process karte the — binder se calculate, principal se sign, bank se cheque draw. Ab Inkwelly mein withdrawal mark karte hi draft refund auto-emit hota hai — line-by-line breakdown ke saath. Finance officer 24 ghante mein process kar deti hai. Razorpay payments ke liye gateway reversal one-click — parent ko 3 din mein UPI pe wapas mil jata hai. Parent reviews bhi improve hue.”
Real-world refund operations
Withdrawal refund (most common). Class 6 student withdraws Nov 15. The Student Information withdrawal flow auto-computes refund per fee head per the refund policy. Finance reviews the proposed line-by-line breakdown, processes the refund (cheque or NEFT), parent gets the money in 24-72 hours.
Excess-payment refund. Parent paid ₹18,000 instead of ₹15,200. The accounts officer creates a refund of type EXCESS from the payment's detail page, refund mode CASH or CHEQUE, parent picks up the cheque next day.
Bounced-cheque refund. Cheque was issued + receipt generated, then cheque bounced. The bounce reverses the payment and cancels the receipt automatically; if the parent had paid via card or UPI alongside, a partial refund of the over-paid portion runs through the workflow.
Gateway reversal. Parent paid via Razorpay; school refunds via gateway reversal. One click; the gateway settles to the parent's original UPI/card in 2-7 business days; the refund.processed webhook auto-marks COMPLETED.
Pre-admission deposit refund. Parent paid an admission deposit, then chose a different school. Refund type WITHDRAWAL with custom reason; refundable per the school's pre-admission refund policy.
Common operations on the Refunds screen
- Process a PENDING refund: capture refund-mode reference, advance status to PROCESSING, monitor for COMPLETED / FAILED.
- Auto-receive draft refunds from student withdrawals — review line-by-line breakdown, approve, process.
- Filter
status=PENDINGto see today's approval queue; bulk-approve when the principal is on call. - Cancel a draft refund with reason if circumstances change; admin role required.
- Run gateway reversal for Razorpay / PayU / Cashfree payments with one click.
- Filter by
refundType=WITHDRAWALover a date range to see all withdrawal refunds for the parent committee meeting. - Export full register or a filtered slice as PDF for CA review or audit week.
- View any refund's full chain: source payment, source receipt, refund mode reference, status timeline, parent communication.
See refund creation + processing live in 30 minutes
Bring a sample withdrawal scenario or an excess-payment case from your school. We'll model the refund inside Inkwelly during the demo — auto-compute the breakdown, advance through PENDING → PROCESSING → COMPLETED, demonstrate gateway reversal for online payments. By the call's end, you'll see the full audit trail.
Limits, safety and the small print
Status transitions are server-enforced. PENDING → PROCESSING → COMPLETED. Out-of-order writes are rejected. CANCELLED requires admin role and reason; FAILED captures the gateway / bank rejection reason verbatim.
Source links are immutable. A refund's source-payment and source-receipt links cannot be edited after creation. The full chain (Invoice → Payment → Receipt → Refund) is auditable end-to-end.
Approval gates are role-based. IAM-controlled: counter staff cannot approve; finance role advances PENDING → PROCESSING; admin role can CANCEL. Server-side enforced.
Gateway reversal depends on settlement. Refunds via Razorpay / PayU / Cashfree GATEWAY_REVERSAL mode are subject to the gateway's refund window (typically 90 days for UPI, 180 days for cards). Outside this window, manual NEFT or cheque is required.
Net amount = refund amount minus deductions. Schools that charge admin fees on withdrawal (per their refund policy) can capture the deduction line; parent sees gross + deductions + net on the refund detail.
Multi-tenant isolation. Each school's refunds are isolated. School A's refund is invisible to School B even within the same trust.
DPDP Act 2023 alignment. Refund records contain student PII, parent payment instrument data and refund destination details. Encrypted at rest with AES-256 on Mumbai-region servers; accessible only via IAM-controlled roles. Audit log records every status change, refund-mode reference, approval, cancellation and parent communication — with user, timestamp and IP. CBSE / Income Tax / GST / NCPCR inspections answer from a single audit export.
Belongs to
1 moduleFrequently asked
8 questionsHow are refunds created — do we type them manually?
Three ways. (1) From a [Payment](/features/fee-payments) detail page — click Create Refund. (2) From a student withdrawal — the [Student Information](/modules/student-information) withdrawal flow auto-emits a draft refund based on the [refund policy](/student-fee/config/refund-policies). (3) From a cancelled [receipt](/features/fee-receipts) where money was collected. Manual creation is the exception, not the norm.
What happens automatically when a student withdraws?
The withdrawal flow reads the student's enrolled [fee group](/features/fee-structures-and-fee-groups), the [refund policy](/student-fee/config/refund-policies) attached, and computes the refundable amount per [fee head](/features/fee-categories-and-fee-heads) based on `isRefundable` flag and proration method. Refundable Tuition prorates; non-refundable Admission and Identity Card skip; refundable Annual Day prorates if the event hasn't happened. A draft refund of type WITHDRAWAL emits with line-by-line breakdown for finance to review and process.
What refund modes does Inkwelly support?
Seven: CASH, CHEQUE, NEFT, UPI, CARD, GATEWAY_REVERSAL ([Razorpay](/features/razorpay-integration) / PayU / Cashfree refund API), BANK_TRANSFER. The mode usually matches the original payment but can differ (e.g., parent paid CASH but wants the refund as NEFT).
How does gateway reversal work?
When the source payment was via Razorpay / PayU / Cashfree, GATEWAY_REVERSAL mode is available. One click triggers the gateway's refund API; the gateway settles to the parent's original payment instrument; the refund.processed webhook auto-marks COMPLETED. Settlement times: 2-7 business days for UPI / NEFT to the parent.
Who approves and processes refunds?
Role-based per [IAM](/modules/identity-access-management). Counter staff: cannot create or approve refunds. Finance officer: advance PENDING → PROCESSING with refund-mode reference. Admin / principal: CANCEL with reason, override status. Server-side enforced — UI adapts per role.
Can we deduct an admin fee from the refund?
Yes — the refund record tracks gross amount, deductions (free-text rows: admin fee, gateway charge, late-fee adjustment), and net amount separately. Parent sees the breakdown on their portal. Schools that follow a refund-policy with admin-fee deductions configure this in [refund policies](/student-fee/config/refund-policies); the auto-emit applies the policy.
What if a refund fails (cheque bounce / gateway rejection)?
Status flips FAILED with the bank/gateway reason captured verbatim. Admin reviews, decides next step — typically reissue the refund with a different mode or reason. Audit log preserves the failure trail.
Where is refund data stored? Is it secure?
Mumbai-region servers, AES-256 at rest, TLS 1.3 in transit. Refund records contain student PII, parent payment instrument data, refund destination details — accessible only via [IAM-controlled roles](/modules/identity-access-management). Multi-tenant isolation guarantees one school's refunds 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 Consumer Protection Act 2019.
You might also like
2 readsSee 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.