Technical Lab · 0071

AIT withholding tax in Odoo: the compliance step VAT setup doesn't cover.

Getting Mushak and VAT right in Odoo is only half of Bangladesh's tax compliance picture. Advance Income Tax withholding on vendor payments is a separate legal obligation under the Income Tax Act, with its own rate table, its own liability account, and its own certificate requirement, and most Odoo implementations in Bangladesh skip it entirely until an NBR audit forces the issue.

What AIT withholding actually is

Advance Income Tax (AIT), commonly called Tax Deducted at Source (TDS) from the payer's perspective, is a legal requirement under Bangladesh's Income Tax Act that obligates a company making certain categories of payment, contractor bills, supplier invoices above threshold amounts, professional and technical service fees, rent, and several other categories, to deduct a percentage of that payment as income tax and deposit it directly to the National Board of Revenue (NBR), rather than paying the full invoiced amount to the vendor and leaving tax collection to the vendor's own annual filing.

The logic is straightforward from the government's side: rather than relying entirely on businesses to self-report and pay income tax at year-end, NBR collects a portion of it in advance, at the point money changes hands, through the paying company acting as a withholding agent. The vendor then receives a certificate showing how much was withheld and can claim that amount as a credit against their own final income tax liability when they file their annual return.

Important: AIT rates, thresholds, and category definitions are set by NBR through the annual Finance Act and statutory rules, and they change periodically. The rate ranges and categories referenced in this guide reflect the general structure of Bangladesh's withholding tax regime and are for ERP configuration planning purposes. Always confirm the exact current rate for your specific transaction category with your tax advisor or the latest NBR circular before finalizing your Odoo tax configuration.

AIT vs VAT/Mushak: not the same thing

This is the single most common point of confusion for Bangladesh companies setting up Odoo, and it is worth stating plainly: AIT and VAT are two completely separate tax mechanisms that happen to both apply to the same vendor invoice, and Odoo must treat them as two independent tax lines, never merged into one.

VAT under the Mushak system, covered in depth in NBR VAT Compliance in Odoo Bangladesh and Mushak 6.3 in Odoo Bangladesh, is a consumption tax charged on top of the value of goods or services, typically added to the invoice amount and eventually payable by the end consumer, with the seller acting as a collection agent. AIT, by contrast, is an income tax mechanism deducted from the payment amount by the buyer, and it relates to the vendor's income, not the transaction's consumption value. A single BDT 5 lakh contractor invoice might carry 7.5% VAT added on top (bringing the gross to BDT 5.375 lakh) and simultaneously have 5-7% AIT deducted from the payment to the contractor, meaning the contractor actually receives less than the base invoice amount even though VAT was also charged. Both mechanisms exist on the same transaction, moving in opposite directions, and Odoo's tax configuration needs separate tax records, separate reporting, and separate liability accounts for each.

2 taxes
On one invoice
VAT added on top, AIT deducted from payment, both apply independently
2x rate
Non-TIN penalty
Typical AIT rate multiplier NBR applies to vendors without a valid TIN
Quarterly
Deposit cycle
Common frequency for depositing withheld AIT to NBR treasury

NBR withholding rates by category

AIT rates are not a single flat percentage, they vary by the nature of the payment and the vendor's registration status. While exact figures should always be confirmed against the current Finance Act and NBR's statutory rules for the applicable year, the general structure that your Odoo tax configuration needs to accommodate looks like this:

Payment categoryTypical rate band (TIN holder)Without valid TIN
Contractor / supplier (goods & general contracts)Lower base rate, tiered by valueHigher rate, often double base
Professional / technical servicesModerate flat rateHigher rate
Rent (commercial premises)Flat rate on gross rentHigher rate
Commission / brokerageModerate flat rateHigher rate
Transport / carrying contractorLower flat rateHigher rate

Two structural points matter more than memorizing exact percentages: first, the non-TIN penalty rate is a deliberate NBR policy to push unregistered vendors toward formal tax registration, and it is common enough (many small local vendors and individual contractors in Bangladesh still lack a TIN) that your Odoo setup must handle it as a routine case, not an edge case. Second, some categories have value thresholds below which no AIT applies at all, so a small, one-off vendor payment may correctly generate zero withholding while a larger payment in the same category triggers it. Your accounts team, or your fiscal position configuration, needs to reflect both the category and the threshold, not just a blanket percentage.

Configuring withholding tax in Odoo

Odoo Accounting supports withholding tax as a standard tax type, though Bangladesh-specific rates are not preloaded and must be configured manually or through a localization module if your implementation partner has one. The core configuration steps are:

  1. Create withholding tax records. Under Accounting → Configuration → Taxes, create a new tax for each AIT category and TIN-status combination you deal with (for example, "AIT – Contractor – TIN," "AIT – Contractor – No TIN," "AIT – Professional Services – TIN"). Set the tax scope to Purchases and the amount as a negative percentage, since withholding tax reduces the amount paid to the vendor rather than adding to what the customer owes you.
  2. Point each tax to a dedicated liability account. Rather than letting the withheld amount post to a generic tax account, create a distinct "AIT Payable" liability account in your Chart of Accounts and assign it on each withholding tax record, so withheld amounts are visibly separated from VAT payable and from ordinary trade payables, matching the account structure principles covered in Odoo Accounting Setup Bangladesh.
  3. Add TIN status as a vendor field. On the vendor's Contact record, add a field (a custom field if not already present) capturing whether the vendor holds a valid TIN and the TIN number itself. This becomes the basis for automatically selecting the correct withholding rate.
  4. Apply the tax on vendor bills. When entering a vendor bill, apply both the relevant VAT tax (if applicable) and the correct AIT withholding tax as separate tax lines on the same bill. Odoo calculates both independently and nets the final payable amount to the vendor accordingly.

Fiscal positions and vendor mapping

Manually selecting the correct AIT tax on every single vendor bill is workable for a small company with a handful of vendors, but it becomes error-prone quickly as vendor count grows, and a wrongly applied rate is exactly the kind of mistake an NBR audit will flag. The more robust approach is to use Odoo's Fiscal Positions (under Accounting → Configuration → Fiscal Positions) to automatically map the correct AIT tax based on the vendor's assigned category.

Set up a fiscal position per vendor category (Contractors – TIN, Contractors – No TIN, Professional Services, and so on), and assign the appropriate fiscal position to each vendor's Contact record. Once this mapping is in place, whenever your accounts team creates a bill for that vendor, Odoo automatically substitutes the correct AIT tax without requiring the person entering the bill to remember which of a dozen possible rates applies. This is the same fiscal-position mechanism used elsewhere in Bangladesh Odoo configurations to route different VAT treatments automatically, and reusing that pattern for AIT keeps your tax configuration consistent and auditable in one place rather than scattered across manual selections.

Keep a category reference sheet current

Because NBR revises withholding rates and thresholds through the annual Finance Act, assign one person, typically your finance manager or external tax advisor, responsibility for reviewing the AIT rate table each fiscal year and updating the corresponding tax records and fiscal positions in Odoo before the new rates take effect. A withholding tax configuration set up correctly in 2024 and never revisited is a compliance gap waiting to surface at the next audit, not a one-time setup task.

Generating TDS certificates

Vendors need documentary proof of how much tax was withheld from their payments in order to claim credit for it against their own annual income tax return. Odoo does not ship a Bangladesh-specific TDS certificate report out of the box, so most companies address this with a custom report or a structured spreadsheet export built from the withholding tax lines already recorded in Odoo Accounting.

A usable TDS certificate, whether generated as an Odoo custom report or exported and formatted separately, should show per vendor per period: the total gross payments made, the AIT amount withheld on each payment with the applicable rate and category reference, the cumulative total withheld for the period, and, critically, the challan or treasury deposit reference confirming the withheld amount was actually deposited to NBR. Vendors and their auditors will ask for this last piece specifically, since a certificate claiming tax was withheld is only useful to the vendor if that tax was genuinely deposited, not merely deducted and held.

Most Bangladesh companies generate these certificates quarterly for larger, recurring vendors and annually for smaller, occasional ones, aligned with NBR's own reporting cycles. Building this as a saved, scheduled report in Odoo rather than a manual quarterly scramble through vendor bill history saves significant time once your vendor count exceeds twenty or thirty active accounts.

The accounting entries AIT withholding creates

When a vendor bill carrying an AIT withholding tax line is validated in Odoo, the accounting entry splits into three parts instead of the simple two-sided entry a bill without withholding would create: the expense or asset account is debited for the full invoiced value, the vendor's payable account is credited for the net amount actually owed after withholding, and the AIT Payable liability account is credited for the withheld amount. This means your vendor payable balance at any point in time correctly reflects only what you still owe that vendor in cash, not the gross invoice value.

Separately, when your company actually deposits the withheld AIT to NBR's treasury (via a bank challan, typically), record this as a payment from the AIT Payable account to your bank account, clearing that liability. Keeping this as a distinct account, rather than letting withheld amounts sit mixed into a general tax or suspense account, means your accountant can reconcile at any point exactly how much AIT has been withheld from vendors, how much has actually been deposited to NBR, and whether any deposit is overdue, which is precisely the kind of gap an NBR audit is designed to find if it is not being tracked deliberately.

Consultation CTA

If your Odoo instance currently handles VAT and Mushak reporting but has never had a proper AIT withholding tax structure configured, you are likely under-withholding, over-withholding, or unable to produce TDS certificates when vendors ask, all of which carry real audit risk. I can help you build the withholding tax records, fiscal positions, and reporting your accounts team needs. Contact me for a strategy session →

Frequently asked questions

What is the difference between AIT withholding and VAT (Mushak) in Odoo?

AIT (Advance Income Tax), also called TDS (Tax Deducted at Source) on the payer's side, is a mechanism under the Income Tax Act where a company deducts a percentage of income tax from a payment to a vendor or contractor before paying them, and deposits it to NBR on the vendor's behalf as an advance against that vendor's eventual income tax liability. VAT under the Mushak system is an entirely separate consumption tax charged on the value of goods or services and is unrelated to income tax. A single vendor payment in Bangladesh often has both VAT charged on top of the invoice and AIT deducted from the payment, and Odoo must handle these as two distinct, independently configured tax mechanisms, not as one combined tax.

How do I configure AIT withholding rates in Odoo?

Create a withholding tax type in Odoo Accounting under Accounting → Configuration → Taxes, scoped to Purchases, with Tax Computation set to a percentage and the amount entered as negative (since it reduces the payable to the vendor). Create one such tax record per NBR-specified rate and service category combination you deal with, since AIT rates vary by category (contractors, suppliers of goods, professional and technical services, and others) and by whether the vendor holds a valid TIN. Then use Fiscal Positions to map the correct AIT tax automatically based on the vendor's category, so the right rate applies without your accounts team manually selecting it on every bill.

Does AIT withholding rate depend on whether the vendor has a TIN?

Yes. NBR's withholding tax rules generally apply a higher AIT rate, in many categories double the standard rate, to payments made to a person or business that does not hold a valid Taxpayer Identification Number (TIN), as an incentive for vendors to register and file returns. In Odoo, this means you need at least two withholding tax rate variants per service category, one for TIN-holding vendors and one for non-TIN vendors, and a mandatory field on the vendor's Contact record to record TIN status and the TIN number itself so the correct rate is applied and never left to memory.

How do I generate a TDS certificate for a vendor in Odoo?

Odoo does not include a Bangladesh-specific TDS certificate report out of the box, so most companies build a simple custom report or a formatted spreadsheet export that pulls, per vendor per period, the total payments made, the AIT amount withheld on each payment, the applicable section/rate reference, and the challan or treasury deposit reference showing the amount was actually deposited to NBR. This is generated from the withholding tax lines recorded against that vendor's bills in Odoo Accounting, typically on a quarterly or annual basis, since vendors need this certificate to claim credit for the tax already deducted when filing their own income tax return.

What accounting entries does AIT withholding create in Odoo?

When a vendor bill with AIT withholding is validated in Odoo, the system reduces the amount payable to the vendor by the withheld amount and posts that amount to a separate AIT Payable (withholding tax liability) account rather than to the vendor's payable account. When your company later deposits that withheld tax to NBR's treasury, you record a payment from the AIT Payable account to cash or bank, clearing the liability. This means your vendor payable balance always reflects only what you still owe the vendor, while a separate, clearly visible liability account tracks tax collected on the government's behalf and not yet deposited.