FEATURE · Student Fee

Every fee invoice, tracked. Issued, paid, partial, overdue.

A live invoice register for every student in your school — auto-generated from fee structures, status-tracked through DRAFT, ISSUED, PARTIALLY_PAID, PAID, OVERDUE and CANCELLED, filterable by class, fee group, invoice date, due date and outstanding balance. The single source of truth for what your school has billed, what's been collected and what's still chasing.

BG PICCOZONE

How most Indian schools track fee invoices today

The accountant of a CBSE day school in Kanpur opens her morning Excel: column A is admission number, column B is student name, columns C through R are fourteen fee items per quarter, and the last three columns mark 'Paid', 'Partial', or 'Pending'. By 11 AM she has updated 47 rows from the last evening's collection. By Friday the same Excel has been opened by three different staff on three different machines, with three slightly different versions. When the principal asks 'how much did Class 6 collect this quarter?' nobody can answer in under twenty minutes — someone has to filter, sum, double-check.

When a parent walks in disputing a balance — 'I paid ₹18,000 in April, why does the receipt say I owe ₹4,500?' — the accountant has no fast answer. The Excel does not know which receipt mapped to which installment. The notebook does not know which fee head was unpaid. The bank statement says the parent paid, but nobody can tie the payment line to the invoice line.

Invoices are the spine of fee tracking. If they don't exist as first-class records, every dispute, every audit, every reconciliation becomes archaeology. Inkwelly's Fee Invoices module makes the invoice the unit of truth — one row per student per installment, status-tracked in real time, joined to receipts, payments, discounts and refunds at the data level.

Inkwelly Fee Invoices list showing class-wise invoices with status pills, invoice date, due date, total amount, outstanding amount and quick actions
Fee Invoices list — every billed invoice with status, due date and outstanding balance in one screen.

How Inkwelly Fee Invoices work

The Fee Invoices screen at /student-fee/invoices lists every fee invoice your school has issued for the current academic session. Each row is one student-installment combination: 'Aarav Sharma — Class 6A — Q2 (Jul-Sep) — ₹7,500 — Issued — Due 15 Jul'. Invoices are auto-generated when a student is enrolled in a Fee Group — the system reads the structure's installment schedule and emits one invoice per installment, applies the discount stack, and assigns the right dueDate based on the structure's policy.

Filters live on top: search by student name or admission number; filter by status (status query param accepts the FeeInvoiceStatus enum), by classId, by feeGroupId, by invoiceDate window, by dueDate window, by hasOutstanding=true to surface only invoices with money still owed. Sort by invoice date, due date or amount. The summary cards above the list count active invoices, total billed, total collected and total outstanding — broken down by status — so the principal sees daily collection health without leaving the screen.

Every invoice line is clickable: drill into /student-fee/invoices/[invoiceId] for the full payment history, the discount stack snapshot, the linked receipts, the underlying installment items, and the audit log of every status change with user and timestamp. Late, overdue or partially-paid invoices automatically feed into the WhatsApp reminder workflow if the school has it enabled in Fee Settings.

What this screen surfaces

  • Class-wise filter — see only Class 6A's invoices, only Class 11 Science Stream, only the Sibling Discount fee group, with auto-totals at the bottom. The class teacher's parent meeting prep moves from 90 minutes to 90 seconds.
  • Status pills (6 states) — DRAFT (yet to be issued), ISSUED (sent to parent), PARTIALLY_PAID (some installments paid, balance pending), PAID (fully settled), OVERDUE (past due date with balance), CANCELLED (voided with audit reason). Each transition is timestamped and audit-logged.
  • Outstanding alerts — toggle hasOutstanding=true to show only invoices with money still owed; sort by outstanding amount descending to see the biggest dues first. The fee counter staff knows exactly which 23 parents to call today.
  • Due-date and invoice-date windows — separate invoiceDateFrom/To and dueDateFrom/To filters let you slice by 'invoices issued this April' or 'invoices due in October'. Quarter-end and audit-week reporting becomes a single URL.
  • Per-invoice detail page — every receipt, every payment line, every discount applied, every status change — ordered as a timeline with users, timestamps and IPs. Parent disputes get answered in seconds.
  • Bulk operations — select multiple invoices to bulk-cancel, bulk-export PDF, or bulk-trigger the WhatsApp reminder workflow.
  • Auto-reconciliation with payments — every Payment recorded against an invoice updates outstandingAmount and the status in real time. No daily 'reconciliation' batch job; the books stay live.
  • Multi-tenancy and RBAC — each school in a multi-school trust has its own invoice register; staff see only the invoices their IAM role authorises (class teacher = own section; principal = full school).

Walkthrough — three views, end to end

BG PICCOZONE
1. Invoice list with status pills, due dates, outstanding column, summary cards on top.
BG PICCOZONE
2. Filters panel — class, fee group, status, date windows, hasOutstanding toggle.
BG PICCOZONE
3. Invoice detail page — line items, payment history, discount snapshot, audit timeline.

Auto-generated from Fee Structures

Invoices are not created manually. When a student joins a Fee Group, the system reads the linked Fee Structure's installment schedule and emits one invoice per installment in DRAFT status. On the cycle's start day (or session start, depending on configuration), they transition to ISSUED automatically and become visible to parents on their portal. Mid-session admissions get prorated invoices based on the structure's proration method. Class transfers, fee group changes and withdrawals trigger automatic recalculation of any unissued future invoices.

Inkwelly invoice generation flow from fee structure with installments expanded into per-student invoices
Inkwelly invoice detail page with line items showing Tuition, Computer Lab, Library, and a partial payment ledger

Per-invoice detail — line items + payment history

Every invoice has a detail screen at /student-fee/invoices/[invoiceId] showing fee head line items (Tuition ₹4,500, Computer Lab ₹300, Smart Class ₹450, etc.), the discount stack snapshot at issue time, the running outstanding balance, and a chronological list of every Payment recorded against the invoice with mode, amount, date and the issuing receipt number. When a partial payment lands, the outstanding amount updates instantly and the status flips to PARTIALLY_PAID; when fully settled, PAID.

OVERDUE detection runs every day

A scheduled job runs daily and any invoice still in ISSUED or PARTIALLY_PAID status with dueDate < today flips to OVERDUE — with a timestamped audit log entry. OVERDUE invoices feed into the WhatsApp reminder workflow, the late-fee accrual rules, and the principal's daily dashboard. Once the parent settles the balance, the status flips back to PAID and the OVERDUE flag is cleared (with the trail preserved). Late-fee rules attached to fee heads compute and apply automatically based on days-overdue.

Inkwelly OVERDUE invoices view with red status pills, days-overdue counter, late-fee accrual amount and quick action to send WhatsApp reminder
Inkwelly invoice cancellation dialog requiring reason text and admin role confirmation

CANCELLED with reason — never silently deleted

Invoices cannot be hard-deleted once issued. Cancelling an invoice opens a dialog requiring a reason (free-text, min 10 chars) and a designated admin's confirmation. The invoice flips to CANCELLED with the reason, user and timestamp permanently logged; the underlying installment-item links stay intact for audit purposes. Receipts associated with a cancelled invoice are not auto-revoked — the Refunds workflow handles money returns separately, with its own approval chain.

Pehle har quarter end pe poori Class-wise list manually banate the. Class 6A ki 47 rows, fir Class 6B ki 43 rows, fir 6C… do din lagte the quarter ke collection numbers banane mein. Ab Inkwelly mein principal ko 'Class 6 quarter 2 collected' ek filter pe mil jata hai — actual time 90 second. Audit week mein hum daily 1-page invoice register print karwa lete hain status-wise breakdown ke saath. Inspector bahut khush.
Accounts Officer · DAV Public School, Kanpur

Real-world operations every Indian school office runs

Five routine operations the Invoices screen turns from hours into minutes:

1. Daily collection close. End of day, the accountant filters by invoiceDateFrom = today, invoiceDateTo = today plus hasOutstanding = false to see today's fully-paid invoices, then exports as PDF for the principal. 90 seconds. Old way: 45-90 minutes.

2. Class teacher's parent meeting prep. Class 6A's class teacher filters by classId = Class 6A, sorts by outstanding amount descending, prints the top 15 — those are the parents she needs to nudge at the meeting. 60 seconds.

3. Quarterly review with the principal. Filter by dueDateFrom = current quarter start, dueDateTo = current quarter end — the summary cards show total billed, total collected, total outstanding for the quarter; status pills show how many are still ISSUED vs PARTIALLY_PAID vs OVERDUE. 30 seconds.

4. CBSE / ICSE renewal documentation. Export the entire active session's invoices as PDF (one click) plus the per-class summary. Defensible — every invoice carries the audit-stamped status timeline. 5 minutes.

5. Parent dispute resolution. Search admission number, open invoice detail, show the parent the line items + payment history + receipt links + discount snapshot. The dispute resolves on the spot. 60 seconds vs the 30-60 minute archaeology of an Excel-only school.

Common operations on the Invoices screen

  • Filter Class 6A overdue invoices, sort by amount descending, print top 20 for the class teacher's parent meeting.
  • Open quarterly status: see PAID, PARTIALLY_PAID, OVERDUE breakdowns for every class with auto-totals.
  • Cancel a wrongly-issued invoice with a typed reason and admin confirmation — audit-logged forever.
  • Drill into any invoice for line items, payment history, receipt links and the audit timeline.
  • Bulk-trigger WhatsApp reminders to all OVERDUE parents in one click.
  • Export filtered set as PDF or CSV for CBSE / Income Tax / GST inspections.
  • Reconcile incoming bank payments to specific invoices with one click — status flips, audit trail preserved.
  • Surface invoices with hasOutstanding=true and dueDate < today to drive the daily collection call list.

See your invoice register live in 30 minutes

Bring your existing fee Excel and we'll model it inside Inkwelly during the demo — every Class, every fee group, every installment surfacing as live invoices with status, audit trail and outstanding balance. By the call's end, you'll see today's collection summary in one screen.

Open Student Fee moduleSee Fee Structures & GroupsSee Fee Payments

Limits, safety and the small print

Invoices are immutable financial records once issued. Editing the line items, amount or due date of an ISSUED invoice is not allowed. The right action is to CANCEL with reason and re-issue a corrected invoice. The audit log retains both records.

Cancellation requires a reason. Free-text minimum 10 characters; admin role required (configured in IAM). The invoice flips to CANCELLED but the underlying installment items remain queryable for the audit trail.

Status transitions are server-enforced. DRAFT → ISSUED → (PARTIALLY_PAID ↔ PAID) → CANCELLED. OVERDUE is a derived state — ISSUED or PARTIALLY_PAID with dueDate < today. PAID locks the invoice; the only path out is cancellation with reason, which then triggers the Refunds workflow if money has been collected.

Bulk operations are paged. A bulk-cancel or bulk-PDF export over 200 invoices runs as a background job; the user sees a progress toast and a download link emerges when ready. No single request blocks the office.

Multi-tenant isolation. Each school in a multi-school trust runs an independent invoice register. School A's invoices are invisible to School B even within the same parent organisation. Trust-level dashboards roll up by school for revenue analysis.

DPDP Act 2023 alignment. Invoice records contain student PII (name, admission number, fee amounts). Encrypted at rest with AES-256 on Mumbai-region servers, accessible only via IAM-controlled roles. Audit log entries record every status change, view, edit, cancellation, and bulk export — with user, timestamp and IP. CBSE / Income Tax / GST inspections are answered with a single audit export.

Belongs to

1 module

Frequently asked

9 questions
How are fee invoices generated — do we manually create them?

No. When a student is enrolled in a [Fee Group](/features/fee-structures-and-fee-groups), Inkwelly reads the linked Fee Structure's installment schedule and auto-generates one invoice per installment in DRAFT status. On the cycle's start day (typically session start), invoices flip to ISSUED automatically and become visible on the parent portal. The school office never types invoices manually unless creating a one-off charge — the standard flow is admission → fee group assignment → invoices auto-flow.

What happens when a parent makes a partial payment?

The invoice's `outstandingAmount` decreases and its status flips from ISSUED to PARTIALLY_PAID. The full payment history (mode, amount, date, receipt number) appears on the invoice detail page in chronological order. When the parent eventually settles the balance, the status flips to PAID and the invoice is locked. Every transition is audit-logged with user, timestamp and IP.

How do OVERDUE invoices work?

A scheduled job runs daily. Any invoice still in ISSUED or PARTIALLY_PAID with `dueDate < today` flips to OVERDUE and gets logged. OVERDUE invoices automatically feed the [WhatsApp reminder workflow](/modules/student-fee), accrue late fees per the late-fee rules attached to their fee heads, and surface on the principal's collection-health dashboard. When the parent pays, the status flips back to PAID and the OVERDUE flag is cleared with audit trail.

Can we cancel an invoice that was issued by mistake?

Yes — from the invoice list or detail page, click Cancel. The dialog requires a reason (free-text, min 10 chars) and a designated admin's confirmation. The invoice flips to CANCELLED with the reason, user and timestamp logged forever. Underlying installment items stay intact for audit. If money has already been collected against the invoice, the [Refunds](/features/fee-refunds) workflow takes over for the return — cancellation alone does not refund money.

How do we filter to see only Class 6A's overdue invoices?

Open `/student-fee/invoices`, set Class filter to Class 6A, set Status filter to OVERDUE, sort by outstanding amount descending. The list shows exactly what the class teacher needs for her parent meeting. URL is shareable and the filter state persists. Add `hasOutstanding=true` to drop already-paid edge cases.

Are invoices linked to receipts and payments at the data level?

Yes. Every Payment recorded against an invoice updates the invoice's `outstandingAmount` and `status` instantly. Every issued [Receipt](/features/fee-receipts) carries the source-invoice link and shows on the invoice's detail page. The chain is: Fee Structure → Invoice → Payment(s) → Receipt(s). Every link is auditable and immutable once issued.

Can different staff see different invoices based on role?

Yes. [IAM role permissions](/modules/identity-access-management) decide visibility. A class teacher sees only her section's invoices; the accounts officer sees the full school; the principal sees the full school plus trust-level rollups (in multi-school trusts). The fee counter staff sees full school but cancellation rights stay restricted to the admin role.

Do we have an audit trail for every invoice action?

Yes — every creation, status transition, payment recording, partial-payment flip, OVERDUE flag, cancellation, reason update and bulk export is logged with user, timestamp and IP address. The audit log is exportable as PDF or CSV from the invoice detail page or the school admin panel — useful for CBSE renewal, Income Tax inspection, GST audit, and parent-committee dispute resolution.

Where is the invoice data hosted? Is it secure?

All Inkwelly data is hosted on Mumbai-region servers, encrypted at rest with AES-256, accessible only via TLS 1.3 with role-based permissions configured in [IAM](/modules/identity-access-management). Multi-tenant isolation guarantees one school's invoices are invisible to another school within the same trust. DPDP Act 2023 alignment includes parental consent for minor PII processing and audit-trail retention as required by the Income Tax 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 Invoices Management · Inkwelly Student Fee