Two clocks run on GST e-invoices. If your aggregate annual turnover (AATO) is ₹10 crore or more, the IRP accepts a document only within 30 days of its date. And anyone can cancel an IRN only within 24 hours of generating it. Miss the 30 days and the IRP won't issue an IRN for that document, so it isn't a valid tax invoice and your buyer's input tax credit is at risk. This guide explains both windows, how ERPNext handles them, and the ageing report that catches an invoice in time. It also covers whether any of this applies to you: the ₹5 crore e-invoice limit, who is exempt, and how to switch e-invoicing on in ERPNext before your liability date.
Nothing warns you before the 30-day window closes: the invoice sits in your books looking valid until the day the IRP stops accepting it. I am Manoj, and I lead ERPNext and Frappe programmes at MithTech, a team of Frappe specialists in Bengaluru. The timing trap below catches finance teams who batch e-invoicing to month-end.
The 30-day reporting window
From 1 April 2025, taxpayers with AATO of ₹10 crore and above can't report invoices, credit notes or debit notes on the IRP once they are more than 30 days old (GSTN advisory, 5 November 2024; it extended the 13 September 2023 rule for ₹100 crore and above). We found no later advisory changing it as of 12 October 2026. Below ₹10 crore the advisory says there is no such restriction "as of now", but e-invoicing itself applies above ₹5 crore; see the e-invoice limit below. After the 30 days, the IRP won't accept the document for an IRN. Without an IRN it isn't a valid tax invoice under Rule 48(5), and your buyer's ITC is at risk. Ask your CA how to correct it.
Enter your turnover and how many days old an invoice is to see whether the 30-day rule binds you and how much reporting window remains.
The danger is how ordinary an unreported invoice looks. It sits in your Sales Invoice list, submitted, apparently fine, and nothing in the default interface counts down the days. Teams often find out when a buyer calls about ITC they can't claim, by which time the window has closed.
The 24-hour cancellation window
Once an IRN is generated, it can be cancelled on the IRP only within 24 hours, and only in full. Inside that window, cancellation maps to the ERPNext Cancel action. After it, the IRN stays, and a reported invoice is corrected by a credit note (itself an e-invoice with its own IRN). Catch a mistake on the first day and you cancel it; catch it on day two and it becomes a credit note in your GSTR-1.
Which correction do you actually need?
The right response depends entirely on how old the IRN is and whether the 30-day window is still open.
Select the correction you need to see whether it is a clean IRN cancel, a credit note, an amendment note, or a document that can no longer be reported.
The costliest mistake is treating a correction after 24 hours as an ERPNext cancel. The button may seem to work, but the IRP still holds the original IRN, so the portal and your books diverge and your return won't reconcile. After 24 hours: a credit note against the reported invoice, then a corrected invoice if needed, each with its own IRN. The GST return filing guide covers how these net out in the return.
How do you monitor, correct and prevent issues?
Copy-paste the ageing report that surfaces invoices nearing day 30, the clean 24-hour cancel steps, the post-24-hour credit-note path, and the habits that keep documents off the cliff.
Report same-day, not at month-end
Generate the IRN at submit. Batching e-invoicing to a monthly run is how documents drift toward day 30 unnoticed. Same-day reporting keeps every invoice well inside both windows.
Run the ageing report daily
Build a report of every B2B invoice whose IRN is still pending, with a days-remaining column sorted ascending. The rows at the top are about to become unreportable. This one control turns the 30-day limit into a managed queue, the same daily habit as bank reconciliation.
Correct by the clock
Wrong invoice under 24 hours old: cancel the IRN and report again. Older than 24 hours: credit note, then a corrected invoice, each with its own IRN. Check that the cancel went through on the IRP, not just in ERPNext.
Guard against back-dating
Any invoice dated before today has already used part of its 30 days. Flag back-dated invoices for immediate reporting, and ask why a document is being dated into the past at all: it usually means a process is running behind, which is the real thing to fix.
When sales dates the invoice and finance reports it
The person choosing the invoice date is often in sales or operations, dating it to when the work happened. The person generating the IRN is in finance, days later. The 30-day clock is running and neither owns it, so a back-dated invoice can reach finance with a week already gone, and a busy month can push a document past day 30 before anyone reconciles.
Make the window visible and owned. The ageing report goes daily to whoever runs the GST return, and any invoice with under five days left is escalated the same day. Pair it with a rule that e-invoicing happens at submit, not in a month-end batch.
Draft policy for your finance and sales leads to ratify. B2B invoices are reported to the IRP at submit, on the same day, not batched to month-end. A daily ageing report lists every pending-IRN B2B invoice by remaining window; any document with fewer than five days is escalated to the GST-return owner immediately. IRN cancellation is attempted only within 24 hours; beyond it, corrections are made by credit note. Back-dated invoices are flagged for same-day reporting and their reason recorded. Confirm the current reporting threshold and any period-specific relaxation with your CA before this enters an SOP.
Report the same day, or manage a window?
| AATO ₹10 crore and above (30-day limit applies) | Below ₹10 crore (no 30-day restriction as of now) |
| High B2B invoice volume | A handful of B2B invoices a month |
| Invoices are sometimes back-dated | Invoices are always current-dated |
| Finance and sales are different teams | One person handles invoice to IRN end to end |
| ITC-sensitive customers who chase documents | Internal or low-sensitivity billing |
Does e-invoicing apply to you? The ₹5 crore limit
Both clocks matter only once e-invoicing applies to you, and that is decided by the e-invoice limit: aggregate annual turnover (AATO) exceeding ₹5 crore, in force from 1 August 2023 under Notification 10/2023-Central Tax. What catches businesses out is that exceeding it in any financial year from 2017-18 brings you in, even if turnover later falls. Two inputs give you the date it began for you, or how much time you have:
Enter your peak aggregate annual turnover and the FY you first crossed ₹5 crore to see the date e-invoicing applied to your PAN.
How it works: CBIC notifies threshold tiers under Rule 48(4) of the CGST Rules. Each tier covers every registered person whose AATO exceeded it in any financial year from 2017-18. Liability starts at the tier's effective date, or, if you crossed later, from the start of the next financial year. So a business that reached ₹6 crore once in FY 2019-20 and shrank back has been covered since 1 August 2023, whether it knew or not. Your CA confirms the computation.
How the limit fell from ₹500 crore to ₹5 crore
E-invoicing started in October 2020 for the largest businesses and reached ₹5 crore in under three years.
The six notification tiers that took the e-invoice limit from ₹500 crore to ₹5 crore, with notification numbers.
The same history as data, for the record:
| 1 Oct 2020 | ₹500 crore | 61/2020 & 70/2020 |
| 1 Jan 2021 | ₹100 crore | 88/2020 |
| 1 Apr 2021 | ₹50 crore | 05/2021 |
| 1 Apr 2022 | ₹20 crore | 01/2022 |
| 1 Oct 2022 | ₹10 crore | 17/2022 |
| 1 Aug 2023 | ₹5 crore | 10/2023 |
One thing follows from the notification's wording: the yearly sweep is mechanical. A business whose AATO first exceeded ₹5 crore in FY 2025-26 is covered from 1 April 2026. No lower threshold had been notified as of 12 October 2026; watch for one rather than assume it.
What exactly counts as aggregate annual turnover?
Most mistakes come from computing the wrong number. Aggregate turnover under section 2(6) of the CGST Act is:
- PAN-level: all GSTINs under the PAN, all states, added together. A Karnataka unit doing ₹3 crore and a Maharashtra unit doing ₹2.5 crore are one ₹5.5 crore business for this test.
- Broader than taxable sales: it includes exempt supplies, exports and inter-state supplies between your own registrations. It excludes inward supplies under reverse charge and the taxes themselves.
- Tested against every FY from 2017-18: once you exceed the threshold in any year, you are covered from then on.
The GST portal shows its own computed AATO for your PAN, with a way to record your own figure. Reconcile against it rather than your management accounts. Your CA owns the statutory computation; the threshold watcher below is an early warning, not a substitute.
Who is exempt?
Exemptions are entity-type exclusions under Notification 13/2020-Central Tax, as amended. Size doesn't enter into it: a ₹900 crore NBFC is out; a ₹6 crore auto-parts trader is in.
Pick your entity category and see whether the Rule 48(4) exclusion covers you — including the SEZ unit vs developer trap.
Two boundary cases cause most of the confusion. An SEZ unit is excluded as a supplier, but a mainland business invoicing to an SEZ still needs an IRN on that zero-rated supply. And government departments and local authorities were excluded by Notification 23/2021, but PSUs and government companies are ordinary registered persons who follow the threshold.
What does issuing without an IRN cost?
An invoice that Rule 48(4) covers, issued without an IRN, is not a tax invoice under Rule 48(5). The consequences add up.
Invoices per month × average tax × months non-compliant: the section 122 exposure and the buyer ITC at risk.
The statutory line is section 122(1): supplying without a valid invoice attracts a penalty of ₹10,000 or the tax involved, whichever is higher, per instance. Section 125 adds a general penalty of up to ₹25,000 where no other penalty applies. Which applies to your case is for your CA. The larger cost is the second card: your customers' input tax credit sits on documents that aren't valid invoices, and a buyer's accounts-payable team that checks IRNs will reject them.
How does ERPNext decide applicability?
ERPNext's GST features come from the India Compliance app, built by Resilient Tech. Its applicability logic is worth reading because it follows the law's structure. From india_compliance/gst_india/utils/e_invoice.py at line 529 (checked against india_compliance v16.6.0 / ERPNext v16.28.0):
def validate_e_invoice_applicability(doc, gst_settings=None, throw=True):
...
if doc.company_gstin == doc.billing_address_gstin:
return _throw(_("e-Invoice is not applicable for invoices with "
"same company and billing GSTIN")) # :541
if not (doc.place_of_supply == "96-Other Countries"
or doc.billing_address_gstin):
return _throw(_("e-Invoice is not applicable for B2C invoices")) # :544
...
applicability_date = get_e_invoice_applicability_date(doc.company,
gst_settings, throw) # :563
Read bottom-up, that is the rule in code. B2C documents are refused at line 544, unless they are exports, since 96-Other Countries supplies need IRNs despite having no buyer GSTIN. Self-billing between your own GSTINs is refused at line 541. Everything else gates on a per-company applicability date. That date comes from gst_settings.py:489: get_e_invoice_applicability_date returns the global e_invoice_applicable_from, or a per-company date when Apply e-Invoice Only for Selected Companies is on. The 30-day reporting window is likewise a setting (e_invoice_reporting_time_limit_days), and the 24-hour IRN cancellation limit is enforced at e_invoice.py:592.
How do you switch e-invoicing on in ERPNext?
Pin the liability date, then have your CA confirm it
The liability finder above gives the answer from the notification history. Your CA confirms the AATO computation (PAN-level, exempt supplies included) and reconciles it against the GST portal's figure.
Configure GST Settings
Tick Enable e-Invoice, set e-Invoice Applicable From, and handle multi-company instances in the per-company table. This is configuration, not code.
Register on the IRP, then sandbox-test the round trip
Create the API user as India Compliance's docs describe (a GSP user on the e-way bill portal, shared with the e-invoice portal), add it under GST Settings → Credentials, sign up for an India Compliance account for API access, and run invoice → IRN → signed QR → cancellation in sandbox mode. The details are in our IRP round-trip guide.
Go live with IRN generation inside the submit flow
From the applicable date, a B2B invoice without an IRN shouldn't go out. India Compliance can generate the IRN at submit; keep it there rather than batching at day-end.
Watch the 30-day window at ₹10 crore and above
At AATO of ₹10 crore and above, documents must be reported within 30 days of their date, from 1 April 2025. After that the IRP refuses them. The ageing report that keeps invoices off that cliff is above.
Who owns the mandate: billing or accounts?
In mid-size firms the failure is organisational, not technical. Sales raises invoices all day and nobody there reads CBIC notifications. Accounts finds out at GSTR-1 filing time that a month of invoices went out without IRNs. The split that works:
- Billing owns generation: IRN at submit, no exceptions.
- Accounts owns the mandate. They hold the liability date, review the threshold watcher's monthly output, and are the only role allowed to change GST Settings. Treat
e_invoice_applicable_fromlike a posting-period control, not a preference. - A saved "Missing IRN" report — Sales Invoice,
docstatus=1,billing_address_gstinset,irnempty, current month — is the daily reconciliation surface between the two roles. Zero rows is the only acceptable steady state.
How does the threshold watch work?
The controls above assume you know where you stand against the ₹5 crore line. Below it, one good quarter can change the answer. Four versions of a watcher give accounts warning before the line is crossed.
Client script, server script, hooks.py and n8n versions of an AATO alert that warns accounts before the ₹5 crore line is crossed, all running on your own infrastructure.
Deploy the server-side watcher first; it maintains the custom_aato_cr field the client script reads. Run it as alert-only for a month, and don't block invoicing below the actual threshold: its job is lead time, not enforcement.
e-Invoice Threshold Policy (draft for CA and auditor review): Accounts recomputes FY-to-date turnover per company on the 1st of each month (scheduler job) and reconciles the PAN-level figure against the GST portal's AATO quarterly. At ₹4.0 crore FY-to-date, india_compliance sandbox testing is scheduled and IRP credentials are created. At ₹4.5 crore, e-invoicing is enabled in a UAT bench and billing staff complete a dry run. On the earlier of (a) statutory liability or (b) crossing ₹5 crore in-year,
e_invoice_applicable_fromis set and IRN-at-submit goes live. The applicable-from date is changed only by the finance controller, with the change logged. Ratify the trigger levels with your CA before adoption; a business with seasonal Q4 revenue should set every trigger earlier.
Enable e-invoicing now, or wait?
| Enable this quarter | Genuinely fine to wait |
|---|---|
| AATO already over ₹5 crore in any FY since 2017-18: you are late, not early | Peak AATO well under ₹5 crore and flat growth |
| FY 2025-26 closed above ₹5 crore: covered from 1 April 2026 | Pure-B2C business with no B2B, export or SEZ documents |
| Close to the line with a strong pipeline | Entity clearly in an exempt category (bank, insurer, GTA) |
| Large buyers already checking vendor IRNs | Even then, keep the watcher on: exemptions and thresholds change |
Frequently asked questions
+What is the 30-day rule for e-invoices in India?
Taxpayers with aggregate annual turnover of ₹10 crore and above can't report an invoice, credit note or debit note on the IRP more than 30 days after its date (GSTN advisory, 5 November 2024, from 1 April 2025). After 30 days the IRP refuses the document, so no IRN can be generated and it isn't a valid invoice. Below ₹10 crore there is no such limit as of now.
+What happens if I miss the 30-day e-invoice reporting window?
The document can no longer be reported to the IRP, so it never gets an IRN and isn't a valid tax invoice under Rule 48(5). Your buyer's input tax credit on it is at risk. How to put it right (a fresh invoice, a correction, the tax period it belongs to) is a question for your CA, not a template.
+Can I cancel an IRN in ERPNext after 24 hours?
No. An IRN can be cancelled on the IRP only within 24 hours of generation. After that it stays, and the correction is a credit note against the reported invoice, itself an e-invoice with its own IRN. Cancelling only in ERPNext after the window leaves your books and the IRP out of step.
+Does the 30-day window run from the invoice date or the ERPNext creation date?
From the document date. GSTN's example: a document dated 1 April can't be reported after 30 April. If you back-date an invoice, the window is already partly used when you create it; one dated 25 days ago has about 5 days left.
+How do I correct a value on an already-reported e-invoice?
You can't edit a reported invoice; its IRN fixes it. A reduction is a Credit Note, an increase is a Debit Note, and each is itself an e-invoice with its own IRN and QR. Amending the ERPNext document without raising the note breaks the audit trail and your return won't reconcile.
+Does the 30-day rule apply to businesses below ₹10 crore?
As checked on 12 October 2026, the 30-day restriction applies at AATO of ₹10 crore and above, and GSTN's advisory says there is no such restriction below that "as of now". Same-day reporting is still the safe habit. Confirm the current position for your period with your CA.
+What is the e-invoice limit in India right now?
Aggregate annual turnover exceeding ₹5 crore, from 1 August 2023 under Notification 10/2023-Central Tax. Exceeding it in any financial year from 2017-18 makes e-invoicing mandatory for your B2B invoices, credit notes, debit notes and exports, unless your entity type is exempt.
+How do I check if e-invoicing applies to my company?
Three checks. Did any FY since 2017-18 have PAN-level AATO above ₹5 crore (the GST portal shows its computed figure)? Are you in an exclusion category — bank, insurer, NBFC, GTA, passenger transport, multiplex admission, SEZ unit, government department? And do you raise B2B, export or SEZ documents at all? The liability finder above turns the first check into a date.
+Is the e-invoice limit per GSTIN or per PAN?
Per PAN. Aggregate turnover under section 2(6) of the CGST Act adds every registration under the PAN across states, including exempt supplies, exports and inter-state supplies between your own GSTINs. Two ₹3 crore GSTINs are a ₹6 crore business for this test.
+Our turnover fell back below ₹5 crore — does the mandate lapse?
No. The test is whether AATO exceeded the threshold in any financial year from 2017-18. Once it has, a later lean year doesn't release you.
+Is e-invoicing required for B2C invoices?
No. E-invoicing covers B2B documents, exports and supplies to SEZs, and India Compliance's validator refuses B2C documents. B2C invoices of businesses above ₹500 crore AATO need a dynamic QR code instead, a separate rule.
+We crossed ₹5 crore during FY 2025-26 — when do we start?
From 1 April 2026: exceed the line in a financial year and e-invoicing applies from the start of the next one. Configure and sandbox-test India Compliance before March closes.
+What happens if we keep issuing B2B invoices without IRNs?
Each such invoice isn't a valid tax invoice under Rule 48(5). Section 122 provides a penalty of ₹10,000 or the tax involved, whichever is higher, per instance, and your buyers' input tax credit on those invoices is at risk. The calculator above gives an indicative figure; your CA confirms the actual exposure.
+Which ERPNext and india_compliance versions does this post apply to?
Code citations are from India Compliance v16.6.0 on ERPNext v16.28.0. The validator and GST Settings fields have the same structure in v15. The thresholds and windows apply whatever software you run.
What related issues might you hit?
- The GST e-invoicing IRP round-trip: why an IRN fails to generate in the first place.
- GST return filing in ERPNext: where credit notes and missed invoices land in GSTR-1.
- ERPNext blocks backdated stock entries: the same back-dating trap on the stock side.
- GST changes from April 2026: the year-start checklist.
What is the bottom line?
The 30-day and 24-hour windows are unforgiving because nothing in your daily work flags them until they close. Find your liability date, set the applicable-from field to match it, and put the threshold watcher on. Then report at submit, run the ageing report daily, and correct by the clock: cancel inside 24 hours, credit-note after.
Manoj
Comments & ratings
No comments yet. Start a new discussion.
Worked with us? Leave a Google review