Reconciliation for Odoo in India — Bank, TDS, GST, Settlement
Odoo is the open-architecture ERP gaining strong traction in Indian SMB and mid-market. Community offers the modular base; Enterprise adds the Indian localisation modules (l10n_in, l10n_in_gst, l10n_in_tcs, l10n_in_tds). Both expose XML-RPC and JSON-RPC interfaces that allow read-only integration without modifying the Odoo modules. What Odoo does not do natively is parse Indian bank narration patterns at scale, reconcile vendor bills against GSTR-2B at line level, or map TDS deductions to the new payment-code regime against Form 26AS. TransactIG reads Odoo through its standard RPC interface and runs the matching layer alongside.
What Odoo Handles Natively, and Where the India Gap Appears
What Odoo does well
Odoo's modular architecture lets Indian customers pick the apps they need — accounting, inventory, manufacturing, CRM, HR — and extend through custom modules. Multi-company is native; multi-currency is native; the chart of accounts is configurable per company. Indian localisation modules carry GST, TDS, TCS, and e-invoice support.
XML-RPC and JSON-RPC provide clean programmatic read access to every model. The bank reconciliation widget allows interactive reconciliation through the standard UI for simple cases.
Where the India gap appears
Bank statement import supports CAMT.053, OFX, QIF, and CSV — not Indian formats like CIB Excel, YONO Business, or co-op bank PDF. The bank reconciliation widget is interactive, not pattern-driven; UPI VPA, NEFT fragment, and cheque-clearing extraction are not native.
TDS section-to-payment-code mapping under Sections 393, 394, 413 of the Income Tax Act 2025 is not yet built into the standard l10n_in_tds module. GSTR-2B reconciliation against thousands of vendor bills at line level is a manual exercise without an integrated matching layer.
TransactIG Plug Points on Odoo
Six matching surfaces sitting alongside Odoo — read-only RPC, no module installation.
Data ingestion
XML-RPC or JSON-RPC service account reads account.move, account.payment, account.bank.statement, and res.partner per company. No custom Odoo module deployed.
Section 393 TDS handling
Odoo TDS lines mapped to new payment codes 1001-1092 under Sections 393, 394, 413 of the Income Tax Act 2025. Reconciled against Form 26AS at code level.
GSTR-2B and IMS
Odoo vendor bills matched to GSTR-2B and IMS at GSTIN + invoice + tax-amount level. ITC eligibility and Rule 36(4) provisional credit per bill.
NACH batch matching
Outbound NACH batches reconciled to bank response files; bounce codes mapped, re-presentation tracked at partner level.
Platform settlements
Razorpay, PayU, Cashfree, Amazon, Flipkart, Meesho settlements disaggregated and matched to Odoo customer invoices and bank statement lines.
Bank statement ingestion
MT940, CAMT.053, CIB Excel, YONO Business, and PDF parsed natively; matched to Odoo bank statements or directly to account.move bank journals.
Odoo Integration Architecture
RPC feeds configured during implementation against Odoo's standard models. Customer admin owns service account credentials.
| Odoo source | Read method | Sync cadence | Field mapping | Variance codes |
|---|---|---|---|---|
| Journal entries (account.move) | XML-RPC search_read on account.move per company | Daily or per-period close | Journal item → TransactIG voucher class | JOURNAL_UNMATCHED, BALANCE_DRIFT |
| Vendor bills (type=in_invoice) | XML-RPC filter on account.move with bill type | Daily | Partner (vendor) → counterparty GSTIN | BILL_OPEN, 2B_MISSING, ITC_BLOCKED |
| Customer invoices (type=out_invoice) | XML-RPC filter on account.move with invoice type | Daily | Partner (customer) → counterparty | INVOICE_OPEN, ADVANCE_UNAPPLIED |
| Bank statements (account.bank.statement) | XML-RPC on bank statement and statement lines | Daily | Journal (bank) → Indian bank narration profile | STMT_LINE_UNMATCHED, CHARGE_UNCLASSIFIED |
| TDS deductions (l10n_in_tds tax lines) | XML-RPC on account.move.line filtered on TDS tax tag | Per deduction cycle | Odoo TDS section → new payment code (1001-1092) | TDS_NOT_IN_26AS, RATE_MISMATCH, SECTION_RECLASSIFIED |
| GST output (l10n_in_gst) | GSTR-1 register output via Odoo report extracts | Per GST cycle | Bill → GSTR-2B row | ITC_INELIGIBLE_2B, INVOICE_MISSING_IN_2B |
Common Reconciliation Gaps in Odoo India Deployments
Bank import scope
Odoo's bank importer accepts CAMT/OFX/QIF/CSV; Indian CIB Excel, YONO Business, and co-op bank PDF require external parsing.
TDS section vs payment code
l10n_in_tds tags carry legacy section labels; Form 26AS shows new payment codes — mapping layer needed during transition.
Bill vs GSTR-2B
Vendor bill posted in Odoo; supplier has not filed GSTR-1; ITC provisional under Rule 36(4). Not surfaced natively at bill level.
Multi-company intercompany
Inter-company journals between Odoo companies drift on timing or one-sided posting; consolidation surfaces but resolution is manual.
Gateway net vs gross
Razorpay settles net of fees; Odoo invoices raised gross; disaggregation needed before bank statement line application.
Custom module variance
Customers running custom-built India modules in Community have variant field structures; mapping needs verification per deployment.
How TransactIG Works with Odoo
Ingest
XML-RPC pulls fetch account.move, account.payment, account.bank.statement, and partner records per Odoo company. External feeds (bank statements, GSTR-2B, 26AS, NACH responses, settlement reports) land alongside.
Match
Odoo records matched to external sources. Narration parsing handles Indian bank narration; payment-code mapping aligns TDS to 1001-1092 codes; GSTR-2B match runs per company.
Exception queue
Unmatched items route to a structured queue with variance codes, ageing, suggested resolution, and maker-checker workflow. Reconciliation artefacts exported per Odoo company.
Frequently Asked Questions
Does TransactIG work with Odoo Community and Enterprise?+
Both. Odoo Community and Enterprise both expose the same XML-RPC and JSON-RPC interfaces for read access. TransactIG authenticates with a customer-provided service account, reads from the account.move, account.payment, res.partner, and bank statement models, and feeds the matching layer. Enterprise customers running the Indian localisation modules (l10n_in, l10n_in_gst, l10n_in_tcs, l10n_in_tds) get richer source data; Community customers with custom-built India layers integrate the same way once the field mapping is established.
How does TransactIG handle Odoo's multi-company setup?+
Odoo's multi-company architecture is one of its strongest features in India — group companies under one Odoo instance, with company-level chart of accounts and access rules. TransactIG ingests data per Odoo company, runs reconciliation at company level (each company has its own bank, TDS, GST), and rolls up to a consolidated group view. Intercompany journals between Odoo companies are auto-matched on amount-and-date pair; intercompany imbalances surface in the exception queue.
How does TDS in Odoo reconcile to Form 26AS?+
Odoo Enterprise's Indian localisation captures TDS at the bill or payment level with section, deductee, and rate. Community customers with custom TDS modules capture the same data through configured product tax rates or dedicated TDS journals. The new payment-code regime (1001-1092) under Sections 393, 394, 413 of the Income Tax Act 2025 introduces codes that may not yet exist in either Odoo configuration. TransactIG applies section-to-payment-code mapping configured during implementation and reconciles against Form 26AS at code level.
How does Odoo reconcile vendor bills against GSTR-2B?+
Odoo Enterprise's l10n_in_gst module captures bills with GSTIN, invoice number, taxable value, and tax break-up. TransactIG reads the account.move records (type=in_invoice) via XML-RPC and matches them line-by-line against the GSTR-2B and IMS feed downloaded from the GSTN portal. ITC eligibility, blocked-credit handling, supplier-not-filed flags, and Rule 36(4) provisional credit are surfaced. Community customers with equivalent custom modules integrate the same way.
How does TransactIG handle Odoo's bank statement reconciliation?+
Odoo's account.bank.statement model accepts CAMT.053, OFX, QIF, and CSV imports. Indian bank reality — CIB Excel, YONO Business, MT940 from private bank corporate accounts, PDF from co-op banks — exceeds Odoo's importer scope. TransactIG parses every major Indian bank statement format natively, extracts narration match keys (UPI VPA, NEFT fragment, cheque), and matches against Odoo's account.move bank journals or directly against AP payments and AR receipts.
How long does Odoo integration take?+
2 to 4 weeks for most Odoo customers. Week one configures the XML-RPC service account and tests read access against account.move, account.payment, and partner models. Week two maps the chart of accounts, multi-company hierarchy, tax codes, and TDS configuration to TransactIG's matching schema. Weeks three and four configure narration patterns, TDS payment-code mapping, GSTR-2B alignment, settlement disaggregation, and the maker-checker workflow. Customers self-hosting Odoo and customers on Odoo.sh both integrate the same way.
Reconciliation that fits the Odoo instance you already run
No custom Odoo module deployed. Read-only RPC. 2 to 4 weeks to first reconciled close, ISO 27001:2022 certified, running from AWS Mumbai.