What NBR requires from your ERP
The VAT and Supplementary Duty Act 2012 (effective June 2019) replaced Bangladesh's older VAT law and introduced a significant compliance layer. Under current NBR rules, a business must take VAT registration once annual turnover crosses the registration threshold (BDT 80 lakh); businesses above the lower turnover-tax enlistment threshold (BDT 30 lakh) are enlisted instead. Certain goods and services require VAT registration regardless of turnover. These thresholds have been revised in successive national budgets — confirm your current obligation against the NBR VAT FAQ before configuring. A VAT-registered business must:
- Issue tax invoices in the Mushak-6.3 format for every taxable supply
- Maintain a purchase register (Mushak-6.1) and a sales register (Mushak-6.2)
- File a monthly Mushak-9.1 VAT return by the 15th of the following month
- Display your BIN (Business Identification Number) on all issued invoices
- Retain input tax credit documentation for a minimum of five years
None of this is impossible to configure in Odoo. But it requires deliberate setup — it doesn't work out of the box with the generic localization.
Out of the box, Odoo is not NBR-compliant. Two weeks of configuration makes it so.
Setting up VAT in Odoo
This is the configuration sequence that produces a compliant setup. Do it in this order — skipping steps creates dependencies that are painful to unwind later.
Reduced VAT rates (5%, 7.5%, 10%) apply to specific sectors — services, construction, certain goods. If your business operates across VAT-rate categories, create separate tax records per rate and map them to the correct product categories via fiscal positions.
Mushak forms — the mapping to Odoo
The Mushak form system is NBR's prescribed format for VAT documentation. Here is how each form maps to Odoo's standard documents:
| Mushak Form | Purpose | Odoo Equivalent | Notes |
|---|---|---|---|
| Mushak-6.3 | VAT invoice — issued at every taxable sale | Customer Invoice (customised template) | Must show BIN, challan no., and 15% VAT separately |
| Mushak-6.1 | Purchase register — all taxable purchases with input VAT | Vendor Bills report + Tax Report (Purchase) | Run monthly; verify against vendor-issued invoices |
| Mushak-6.2 | Sales register — all taxable sales with output VAT | Customer Invoices report + Tax Report (Sale) | Run monthly; feeds directly into Mushak-9.1 |
| Mushak-6.7 | Credit note — for returns and adjustments | Credit Note (Customer) | Must reference original Mushak-6.3 challan number |
| Mushak-9.1 | Monthly VAT return — filed with NBR by 15th | Generic Tax Report → export to NBR format | Requires custom report or manual transfer; not auto-generated |
Five misconfiguration traps
These are the VAT setup errors I have encountered across multiple Bangladesh implementations. All of them are correctable — but two of them cause reconciliation nightmares if caught after month-end.
- TRAP 01 Single VAT account for input and output. Using the same GL account for both means your VAT liability and VAT receivable net against each other in the balance sheet — which is wrong and confusing. Always create two separate accounts.
- TRAP 02 Not setting fiscal positions on export customers. If you sell to export customers without a "Zero-Rated Export" fiscal position, Odoo will apply 15% VAT to their invoices by default. You'll have exported and incorrectly charged output VAT — and then filed it.
- TRAP 03 Shared invoice sequence with non-VAT documents. NBR requires a continuous, unbroken Mushak-6.3 sequence. If your regular invoices and VAT invoices share a sequence, gaps appear in the challan numbers — a red flag during any NBR audit.
- TRAP 04 Claiming input VAT on exempt purchases. Some categories are VAT-exempt on the supply side but still generate VAT on the purchase side. Verify the exemption status at purchase, not just at sale. If uncertain, consult your tax advisor — the penalty for wrongful input credit claims is 2× the tax claimed.
- TRAP 05 Not locking periods before filing. If a user posts a backdated invoice after the monthly return has been filed, the Mushak-6.2 register and the submitted Mushak-9.1 will diverge. Always lock the accounting period in Odoo the day after filing.
Month-end VAT reconciliation workflow
This is the 5-step sequence I walk accountants through in every Bangladesh deployment:
- Generate the Tax Report in Odoo for the month — verify output VAT total and input VAT total. Compare against the Mushak-6.2 and Mushak-6.1 registers.
- Reconcile the VAT accounts in the GL: VAT Payable balance should equal output VAT on the tax report. VAT Receivable should equal input VAT. Any discrepancy means a mis-posted journal entry.
- Calculate the net VAT payable (Output VAT − Input VAT). This is the amount to remit to NBR. If input exceeds output, carry the credit forward — do not claim a refund without formal application.
- Post the VAT payment journal entry after the bank transfer: debit VAT Payable, credit bank account. This closes the period's VAT liability.
- Lock the accounting period in Odoo (Accounting → Accounting → Lock Dates). Set the lock date to the last day of the filed month. This prevents backdated entries from contaminating the next period's return.
The monthly Mushak-9.1 return is submitted through NBR's online VAT system (the VAT Online portal). Odoo does not file with NBR directly — your accountant exports the period's tax figures and enters or uploads them in the portal. Build that export-and-submit step explicitly into the month-end checklist so the Odoo Tax Report and the submitted return always reconcile line-for-line.
For the underlying data migration — including chart of accounts setup that feeds into this VAT structure — the Excel → Odoo migration checklist covers the master data steps. And if you're setting up from scratch and haven't yet mapped your accounting structure, start with the discovery session guide — the VAT configuration is only as correct as the chart of accounts it maps to.
NBR compliance configuration is included in all my Odoo consulting engagements. If your current Odoo setup isn't producing compliant Mushak-6.3 invoices, let's fix it →
FAQ
How do I set up VAT in Odoo for Bangladesh?
Configure your company BIN number in Settings, create tax groups for Output VAT (15%) and Input VAT (15%), set up fiscal positions for VAT-exempt and zero-rated export supplies, and map your chart of accounts to separate NBR-required VAT liability and receivable accounts. Customise the invoice template to produce Mushak-6.3 format output.
What is the Mushak-6.3 form in Odoo?
Mushak-6.3 is the NBR-standard VAT invoice format required for every taxable sale in Bangladesh. In Odoo, it maps to a customised customer invoice report template that includes your BIN, a continuous challan number sequence, and the 15% VAT amount shown as a separate line item in the NBR-prescribed layout.
What is the standard VAT rate in Bangladesh?
The standard VAT rate in Bangladesh is 15% under the VAT and SD Act 2012. Reduced rates of 5%, 7.5%, and 10% apply to specific sectors including certain services and construction. Export sales are zero-rated. Some goods and services are VAT-exempt under Schedule 1 of the Act.