E-invoicing under GST is mandatory for businesses with aggregate annual turnover above five crore rupees. It applies to business-to-business transactions and exports. Banking, insurance, NBFCs, goods transport agencies, passenger transport and multiplexes are exempt, as are business-to-consumer sales. If you build billing software, an ERP, or any product that issues invoices on behalf of Indian businesses, this is not an optional module — it determines whether your customer's invoices are legally valid.
The mechanism is straightforward and the consequence of getting it wrong is not. The invoice is reported to the Invoice Registration Portal, which validates the data and returns it with a unique Invoice Reference Number and a QR code. An invoice without a valid IRN is invalid under GST law, which means the buyer cannot claim input tax credit against it. The penalty for an incorrect invoice can reach a hundred per cent of the tax due or ten thousand rupees, whichever is higher, per invoice.
There is a deadline inside the deadline. Businesses with turnover of ten crore and above must report an invoice to the IRP within thirty days of its issue date. Invoices dated outside that window are rejected by the portal. For an engineering team this converts what looks like an asynchronous reporting job into something with a real service level: a queue that silently backs up for a month does not produce a late invoice, it produces an invoice that can never be registered.
That single constraint should drive the design. Reporting needs to be a durable, retryable pipeline with visible age on every unregistered invoice, alerting well before thirty days rather than at it, and a clear operational answer for what happens when the portal is unavailable — which it periodically is. Idempotency matters here more than usual, because a retry that produces a second registration attempt for the same invoice is a reconciliation problem someone will spend a week on.
Access to the portal now requires two-factor authentication by OTP for all taxpayers, which has a design implication people underestimate: any integration built around a single shared credential and an unattended session will break. Plan for credential handling, session lifetime and the human in the loop, and decide early whether you integrate directly or through a GST Suvidha Provider — the latter costs money and removes a category of operational pain.
The reason this belongs on an engineering roadmap rather than a finance one is that the failure mode is invisible until it is expensive. Invoices go out, customers receive them, and nothing appears wrong until a buyer's accountant cannot claim credit and calls. Building the age-of-unregistered-invoice metric into a dashboard on day one is a small piece of work that prevents that call entirely.