Technical Lab · 0003

NBR VAT compliance in Odoo: a Bangladesh practitioner's guide.

Mushak forms, BIN configuration, tax group setup, and month-end reconciliation — the compliance layer that most Odoo implementations in Bangladesh get wrong in the first six months.

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:

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.

Step 1Settings → Company → add your BIN to the company record (Tax ID field). This appears on all printed invoices automatically. Step 2Accounting → Configuration → Taxes. Create two tax records: "Output VAT 15%" (type: Sale, scope: Taxable Goods/Services) and "Input VAT 15%" (type: Purchase). Set both to Tax Group "VAT 15%". Step 3Create a Tax Group called "VAT 15%". Map it to two accounts: VAT Payable (output) and VAT Receivable (input) — both separate from your standard payables/receivables. Step 4Fiscal Positions: create "VAT Exempt" (for Schedule 1 supplies) and "Zero-Rated Export" (for export sales). Map each to override the default 15% tax with 0% or exempt. Step 5Invoice sequences: set a dedicated sequence for Mushak-6.3 invoices. NBR requires a continuous, unbroken numeric sequence — do not share with non-VAT invoices. Step 6Customise the invoice report template to match the Mushak-6.3 layout: BIN, challan number, VAT amount in a separate line, and the prescribed footer text.
Note

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.

Note · Trading company · 2 export customersMonth 3 post-go-live
Export invoices had been issued without a Zero-Rated Export fiscal position. For two months Odoo applied 15% output VAT to zero-rated export sales — and that incorrect output VAT flowed straight into the filed Mushak-9.1 returns. Unwinding it meant corrective returns and a written explanation to the VAT Circle office. The fix in Odoo took twenty minutes. The compliance cleanup took six weeks. This is TRAP 02, caught one quarter too late.

Month-end VAT reconciliation workflow

This is the 5-step sequence I walk accountants through in every Bangladesh deployment:

  1. 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.
  2. 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.
  3. 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.
  4. Post the VAT payment journal entry after the bank transfer: debit VAT Payable, credit bank account. This closes the period's VAT liability.
  5. 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.
Note

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.

PS

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.