This is an illustrative project pattern, not an attributed client engagement Get a compliance audit →
Illustrative pattern · Retail · GST e-invoicing

N GSTINs. N logins. One dashboard instead.

An illustrative project pattern — not an attributed client engagement — showing how we typically approach a common Odoo problem: a business registered under several GSTINs, each one submitting e-invoices to the IRP separately, with no single view of what’s failed and why.

Get a compliance audit → See the approach
What this page is — and isn’t This is a composite, illustrative scenario built from a pattern we see repeatedly across multi-GSTIN retail and distribution businesses on Odoo. It is not a write-up of a named client, and no company, revenue figure, or outcome number below is a real, attributed result. Entrophy’s verifiable published work is two apps on apps.odoo.com — SOP Builder and the EU E-Invoicing Tracker. This page exists to show how we’d scope and build something like this, not to claim we already have, for someone specific.
The situation

One legal entity. Several GST registrations. Zero shared view.

Picture a retail chain running Odoo, operating warehouses and billing counters across several Indian states. Each state means a separate GSTIN, and under India’s e-invoicing mandate, each invoice above the applicable turnover threshold has to be reported to the Invoice Registration Portal (IRP) individually — per GSTIN, not per company. Odoo’s Indian localisation (l10n_in_edi) handles the submission itself well enough. What it doesn’t give you out of the box is a combined view across registrations.

In practice that means someone on the finance team logs into a separate view (or filters by company) for every GSTIN, every day, looking for invoices the IRP rejected — usually for a mismatched HSN code, a duplicate invoice number, or a schema validation error the portal doesn’t explain in plain language. A rejected invoice sits there until a human notices, re-opens it, fixes the field, and resubmits by hand. Multiply that by five or six state registrations and the checking itself becomes a job.

The actual failure mode It’s rarely one dramatic outage. It’s a slow drip of individually-small failures — a few rejected invoices per GSTIN per week — that nobody catches until the month-end GSTR-1 reconciliation, by which point some of them are now late filings, not just delayed ones.
The approach

Aggregate the view. Automate the retry.

The pattern doesn’t replace Odoo’s e-invoicing integration — it sits on top of it, pulling every GSTIN’s submission status into one place and closing the loop on failures automatically.

Unified submission dashboard

Every company record’s IRP submission status — acknowledged, pending, rejected — rolled into one screen, filterable by GSTIN, date, or failure reason.

Automatic retry queue

Rejected invoices land in a queue instead of a dead end. Transient failures (portal timeouts, rate limits) get retried on a schedule without anyone touching them.

Failure reason decoding

The IRP’s raw schema error codes get translated into the actual field that’s wrong — HSN mismatch, duplicate invoice number, incorrect place-of-supply — so a fix doesn’t need a specialist to interpret.

E-way bill auto-pairing

Where a shipment needs an e-way bill, it’s generated and linked back to the matching IRN automatically instead of being a separate manual step someone has to remember.

GSTIN-level permissions

State-level finance staff see and act on their own GSTIN’s queue; group finance sees the roll-up across all of them — without spreadsheet exports in between.

Exception alerting

Anything that fails after repeated automatic retries gets flagged to a human immediately, instead of surfacing three weeks later during GSTR-1 reconciliation.

The outcome, qualitatively

Checking becomes exception-handling.

Before — per-GSTIN checking

  • A separate login (or company filter) per GST registration, checked daily by hand
  • Rejected invoices sit silently until someone happens to notice
  • Raw IRP error codes require someone who already knows what they mean
  • E-way bills generated as a manual afterthought, sometimes missed entirely
  • Failures usually surface at GSTR-1 reconciliation — days or weeks late

After — one operational view

  • One dashboard, all GSTINs, filtered any way finance actually needs
  • Transient failures retried automatically, no human in the loop for the easy cases
  • Error codes translated to the field that needs fixing, in plain language
  • E-way bills paired to their invoice automatically as part of the same flow
  • Only genuine exceptions reach a person — and they reach them the same day

This is a description of a design pattern and its intended effect, not a measured result from a real deployment. We’d expect the specific numbers — how many invoices, how many GSTINs, how much staff time — to vary a lot by business, which is exactly why we don’t print fabricated ones here.

1 dashboardreplaces N separate GSTIN logins
Auto-retryinstead of manual resubmission per failure
E-way billauto-paired to the matching e-invoice (IRN)
30 daysOdoo/GST rule: e-invoice reporting window for applicable taxpayers

Juggling e-invoicing across multiple GSTINs?

Tell us how many registrations, states, and roughly how many invoices a month. We’ll come back with a straight answer on whether a unified dashboard and retry queue is worth building for your setup — and what it would take.