How the Bangladesh মূসক (VAT) calculator is verified

Inputs

InputFieldType
Amount (BDT)amountnumber
The amount isdirectionstring
Supplycategorystring
Service imported from abroad (you, the recipient, pay the VAT)reverseChargeboolean
Your turnover over 12 months (BDT)annualTurnovernumber
You import, export, supply under a tender or contract, or deal in goods or services with supplementary dutycompulsoryRegistrationboolean

The formula

Each derived value below is computed by the Valem engine from the expression shown, in this order. Nothing else runs — there is no hidden code path.

Derived valueFieldFormula (JSONata)
Rateratecategory = 'standard' ? $const.standardRate : (category = 'reduced10' ? $const.reducedRate10 : (category = 'reduced75' ? $const.reducedRate75 : (category = 'reduced5' ? $const.reducedRate5 : $const.zeroRate)))
Rate appliedeffectiveRatereverseCharge ? 0 : $round(rate, 4)
Value before VATnetAmountdirection = 'remove' ? $round($n(amount) / (1 + effectiveRate), 2) : $round($n(amount), 2)
VATvatAmount$round(netAmount * effectiveRate, 2)
VAT you pay on the imported service (s.20)selfAssessedVat(reverseCharge and category != 'exempt') ? $round(netAmount * $const.importedServiceRate, 2) : 0
Total with VATgrossAmount$round(netAmount + vatAmount, 2)
Turnover tax for the year at 4% (enlisted, ৳30–50 lakh)turnoverTaxAnnual($t := $n(annualTurnover); (compulsoryRegistration or $t > $const.registrationThreshold or $t <= $const.enlistmentThreshold) ? 0 : $round($t * $const.turnoverTaxRate, 2))
Must register for VATmustRegister$n(annualTurnover) > $const.registrationThreshold or compulsoryRegistration

Rates and thresholds

The expressions above read these as $const. They are the figures the annual refresh replaces, so they live as data rather than being written into the formulas — which is what makes a year-on-year change a one-line diff instead of an edit to arithmetic.

ConstantValue
standardRate0.15
reducedRate100.1
reducedRate750.075
reducedRate50.05
zeroRate0
importedServiceRate0.15
registrationThreshold5000000
enlistmentThreshold3000000
turnoverTaxRate0.04

Test vectors (14)

Every case is executed against this model on each build, by the Java engine and independently by a JavaScript one. A mismatch of a single cent fails the build, so the page cannot ship advertising a figure the model no longer produces.

Case 1 — V1 ৳1,00,000 at the standard 15%: VAT ৳15,000, total ৳1,15,000

given amount100000
given directionadd
given categorystandard
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect netAmount100000
expect vatAmount15000
expect grossAmount115000

Case 2 — V2 take 15% out of ৳1,15,000

given amount115000
given directionremove
given categorystandard
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect netAmount100000
expect vatAmount15000

Case 3 — V3 Third Schedule 10%

given amount100000
given directionadd
given categoryreduced10
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect vatAmount10000

Case 4 — V4 Third Schedule 7.5%

given amount100000
given directionadd
given categoryreduced75
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect vatAmount7500
expect grossAmount107500

Case 5 — V5 Third Schedule 5%

given amount100000
given directionadd
given categoryreduced5
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect vatAmount5000

Case 6 — V6 export: zero rate

given amount100000
given directionadd
given categoryzeroRated
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect rate0
expect vatAmount0

Case 7 — V7 exempt supply

given amount100000
given directionadd
given categoryexempt
given reverseChargeno
given annualTurnover0
given compulsoryRegistrationno
expect vatAmount0
expect grossAmount100000

Case 8 — V8 imported service ৳2,00,000: the recipient pays ৳30,000, none on the invoice

given amount200000
given directionadd
given categorystandard
given reverseChargeyes
given annualTurnover0
given compulsoryRegistrationno
expect vatAmount0
expect selfAssessedVat30000

Case 9 — V9 imported service at a Third Schedule category: still 15% under s.20

given amount100000
given directionadd
given categoryreduced5
given reverseChargeyes
given annualTurnover0
given compulsoryRegistrationno
expect selfAssessedVat15000

Case 10 — V10 turnover exactly ৳50 lakh: not above the registration threshold, turnover tax ৳2,00,000

given amount100000
given directionadd
given categorystandard
given reverseChargeno
given annualTurnover5000000
given compulsoryRegistrationno
expect mustRegisterfalse
expect turnoverTaxAnnual200000

Case 11 — V11 ৳50,00,001: must register, no turnover tax

given amount100000
given directionadd
given categorystandard
given reverseChargeno
given annualTurnover5000001
given compulsoryRegistrationno
expect mustRegistertrue
expect turnoverTaxAnnual0

Case 12 — V12 exactly ৳30 lakh: neither registration nor turnover tax

given amount100000
given directionadd
given categorystandard
given reverseChargeno
given annualTurnover3000000
given compulsoryRegistrationno
expect mustRegisterfalse
expect turnoverTaxAnnual0

Case 13 — V13 ৳40 lakh: turnover tax ৳1,60,000

given amount100000
given directionadd
given categorystandard
given reverseChargeno
given annualTurnover4000000
given compulsoryRegistrationno
expect turnoverTaxAnnual160000

Case 14 — V14 importer with ৳10 lakh turnover: registration whatever the turnover (s.4(2))

given amount100000
given directionadd
given categorystandard
given reverseChargeno
given annualTurnover1000000
given compulsoryRegistrationyes
expect mustRegistertrue
expect turnoverTaxAnnual0

Sources

Check it yourself — and reuse it

The whole model as JSON — inputs, outputs, formulas, vectors and sources in one re-runnable document.

This model is published under CC BY 4.0: use it, adapt it, build on it, with attribution. The licence covers the model — the expression of each rule and the arrangement of the catalog. The rates and thresholds are law, and nobody licenses those; the sources above are where they come from.

← Back to the Bangladesh মূসক (VAT) calculator

Built with Valem — a live, verifiable calculator you can fork and embed.