Indian GST: what the
module does, how to configure
it, and where businesses go wrong
The module was installed. Invoices were raised. Everything appeared to be working. Then the CA found GSTR-1 and GSTR-3B mismatches after the first filing cycle. A complete guide to getting it right before the first transaction goes out.
“We went live on Odoo. GST configuration looks fine. But the CA found mismatches in GSTR-1 and GSTR-3B after the first month.”
That sentence arrives in support conversations more than any other GST-related complaint. The module was installed. The taxes were set up. Invoices were raised. And then the first filing cycle revealed that CGST was being applied to an interstate transaction, or HSN codes were missing from the HSN summary, or reverse charge was not being captured at all.
Odoo’s Indian GST module is genuinely comprehensive — it covers CGST, SGST, IGST, reverse charge, TDS, TCS, e-invoicing, e-way bills, GSTR-1, GSTR-3B, and GSTR-9, all included in the Enterprise subscription at no additional cost. The challenge is not the module. The challenge is configuring it correctly before the first live transaction.
Before setup steps, it is worth being clear about scope: what is included in Odoo Enterprise’s Indian localisation, and what requires deliberate configuration.
- Indian chart of accounts
- CGST, SGST, IGST, CESS tax groups at all slabs
- Fiscal positions for intrastate and interstate supply
- HSN and SAC code fields on products
- GSTR-1 report in JSON and CSV
- GSTR-3B summary report
- GSTR-9 annual return support
- E-invoicing via NIC/IRP portal
- E-Way Bill via NIC portal
- TDS and TCS tracking and threshold alerts
- GSTIN verification for customers
- Reverse charge mechanism (RCM)
- Credit and debit notes with IRN linkage
- GSP credentials via NIC portal (BVM IT for Odoo 19)
- NIC portal API user creation
- Fiscal position mapping per customer
- HSN/SAC code assignment per product
- TDS section mapping per vendor account
- Multi-GSTIN setup for multi-state businesses
- Invoice template update for IRN and QR code
- GSTR-2B reconciliation workflow
Everything in the left column exists in Odoo. None of it works correctly without the right column being done first — in the right sequence — before the first invoice goes out.
This is the most commonly misconfigured element of Indian GST in Odoo. Understanding it prevents the most frequent compliance problem after go-live.
Odoo uses fiscal positions to determine whether a transaction is intrastate or interstate. A fiscal position looks at the customer’s GSTIN, compares the state code against the company’s registered state, and automatically applies the correct tax combination.
Intrastate supply: Customer’s GSTIN starts with the same state code. Odoo maps 18% GST → 9% CGST + 9% SGST.
Interstate supply: Different state code. Odoo applies 18% IGST — not split into CGST/SGST.
Unregistered B2C customer: No GSTIN. Odoo applies the product’s default tax. For B2C interstate supplies above ₹2.5 lakhs, place of supply must be captured manually.
The failure mode: fiscal positions are not assigned to customer masters. When a customer has no fiscal position set, Odoo applies whatever tax is on the product by default, with no state-based logic. CGST/SGST lands on an interstate transaction, or IGST lands on an intrastate one. The buyer’s ITC is in the wrong tax head. GSTR-1 is wrong. Amendment is required, and the buyer’s ITC is blocked until it is corrected.
Assign fiscal positions to every customer master at the time of customer creation — based on the first two digits of their GSTIN. Do not rely on the salesperson to set it transaction by transaction. In live operations, they will not. The accountant will find the error at month-end, after 30 or 40 invoices have gone out with the wrong tax split.
The order of these steps matters. Skipping or reversing any step creates conflicts that are time-consuming to resolve after invoices have been raised.
When an invoice is confirmed, Odoo sends the invoice data as a JSON payload to the IRP via the GSP API. The portal validates the data, generates a unique Invoice Reference Number (IRN), and returns a digitally signed QR code. Odoo stamps both on the invoice record. The entire sequence completes in under ten seconds.
The most common reasons e-invoicing fails at confirmation:
- Customer GSTIN is missing, invalid, or cancelled on the portal
- HSN code is missing on one or more invoice line items
- Place of supply does not match the fiscal position applied
- GSP API credentials have expired or were entered incorrectly
- Sandbox credentials were used in the production environment
Never cancel a confirmed e-invoice manually to handle adjustments. Always use Odoo’s Add Credit Note or Debit Note function on the original invoice. This creates the adjustment document with the correct IRN linkage. Manual cancellation and re-creation orphans the original IRN on the government portal and creates GSTR-2B mismatches with the buyer.
With GST E-Filing and Matching enabled, the monthly workflow has three stages:
Go to Accounting → Reporting → India → GST Return Periods. Open the return period for the month, click GSTR-1 Report. Odoo runs basic validations: missing GSTINs, invoices with no place of supply, HSN summary completeness, and tax rate mismatches. Review and correct all flagged items before proceeding.
Submit directly from Odoo via the GSP API, or download the JSON and upload manually to the portal. Both paths use identical underlying data from Odoo’s invoice records.
After the 14th of the month, GSTR-2B is available on the GST portal. Odoo retrieves GSTR-2B data and compares it against the purchase register. Invoices in Odoo that do not appear in GSTR-2B are flagged. ITC should only be claimed on invoices that appear in GSTR-2B.
Claiming ITC in GSTR-3B on invoices the vendor has not yet filed in their GSTR-1. The invoice exists in Odoo’s purchase register. It does not appear in GSTR-2B. ITC is claimed. A notice arrives under Rule 36(4) of the CGST Rules. Reversal is required with 18% interest per annum from the date of the claim. The GSTR-2B matching step in Odoo takes 15 minutes before each GSTR-3B filing. The reversal and notice response takes weeks.
A business registered in multiple states holds a separate GSTIN for each state. In Odoo, each GSTIN operates as a separate company within the multi-company setup. Invoices from the Delhi entity carry the Delhi GSTIN. Invoices from the Maharashtra entity carry the Maharashtra GSTIN. Each entity files its own GSTR-1, GSTR-3B, and GSTR-9 separately.
The Indian chart of accounts, tax groups, fiscal positions, and GSP credentials are company-specific in Odoo. A centralised finance team can access all companies from a single Odoo login, but filing is done entity by entity.
Inter-state stock transfers between branches of the same business attract GST as supplies to a distinct person. In Odoo, the sending entity raises a transfer invoice with IGST and the receiving entity posts a corresponding vendor bill to claim ITC. Both entries must appear in the respective returns.
Need help configuring Odoo’s Indian GST correctly?
ochre.digital configures GST, e-invoicing, TDS, and multi-GSTIN setups for Indian businesses — and involves your CA in UAT before go-live.
