How the China 车辆购置税 (vehicle purchase tax) calculator is verified

Inputs

InputFieldType
Taxable price, excluding VAT (CNY)taxablePricenumber
Powertrainpowertrainstring
Engine displacement (litres) — combustion and plug-in hybrid carsengineLitresnumber

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)
From 2027 (plug-in hybrids taxed) — band fromvvtMin2027powertrain = 'bev' ? 0 : ($l := $n(engineLitres); $l <= $const.litres1 ? $const.vvtMin1 : ($l <= $const.litres2 ? $const.vvtMin2 : ($l <= $const.litres3 ? $const.vvtMin3 : ($l <= $const.litres4 ? $const.vvtMin4 : ($l <= $const.litres5 ? $const.vvtMin5 : ($l <= $const.litres6 ? $const.vvtMin6 : $const.vvtMin7))))))
From 2027 — band tovvtMax2027powertrain = 'bev' ? 0 : ($l := $n(engineLitres); $l <= $const.litres1 ? $const.vvtMax1 : ($l <= $const.litres2 ? $const.vvtMax2 : ($l <= $const.litres3 ? $const.vvtMax3 : ($l <= $const.litres4 ? $const.vvtMax4 : ($l <= $const.litres5 ? $const.vvtMax5 : ($l <= $const.litres6 ? $const.vvtMax6 : $const.vvtMax7))))))
Vehicle and vessel tax 2026 — national band fromvvtMinpowertrain = 'combustion' ? vvtMin2027 : 0
Vehicle and vessel tax 2026, top of band / yearvvtMaxpowertrain = 'combustion' ? vvtMax2027 : 0
Purchase tax at 10%purchaseTaxFull$round($n(taxablePrice) * $const.purchaseTaxRate, 2)
New-energy reduction (half, at most 15,000)nevReductionpowertrain = 'combustion' ? 0 : ($h := $round(purchaseTaxFull * $const.nevReductionShare, 2); $h < $const.nevReductionCap ? $h : $const.nevReductionCap)
Vehicle purchase tax (one-off)purchaseTax$round(purchaseTaxFull - nevReduction, 2)

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
purchaseTaxRate0.1
nevReductionShare0.5
nevReductionCap15000
litres11
litres21.6
litres32
litres42.5
litres53
litres64
vvtMin160
vvtMax1360
vvtMin2300
vvtMax2540
vvtMin3360
vvtMax3660
vvtMin4660
vvtMax41200
vvtMin51200
vvtMax52400
vvtMin62400
vvtMax63600
vvtMin73600
vvtMax75400

Test vectors (7)

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 — K1 a 150,000 yuan 1.5-litre petrol car: 15,000 purchase tax, 300–540 a year

given taxablePrice150000
given powertraincombustion
given engineLitres1.5
expect purchaseTax15000
expect vvtMin300
expect vvtMax540

Case 2 — K2 exactly 1.6 litres is still the 1.0–1.6 band (“1.6升(含)”)

given taxablePrice150000
given powertraincombustion
given engineLitres1.6
expect vvtMin300
expect vvtMax540

Case 3 — K3 a 200,000 yuan battery-electric car in 2026: half, 10,000; no vehicle and vessel tax

given taxablePrice200000
given powertrainbev
given engineLitres0
expect purchaseTaxFull20000
expect nevReduction10000
expect purchaseTax10000
expect vvtMax0
expect vvtMax20270

Case 4 — K4 the 15,000 cap binds above 300,000: a 500,000 yuan EV pays 35,000

given taxablePrice500000
given powertrainbev
given engineLitres0
expect purchaseTaxFull50000
expect nevReduction15000
expect purchaseTax35000

Case 5 — K5 at 300,000 the half is exactly the cap; a 1.5-litre plug-in hybrid is exempt in 2026 and pays 300–540 from 2027

given taxablePrice300000
given powertrainphev
given engineLitres1.5
expect nevReduction15000
expect purchaseTax15000
expect vvtMin0
expect vvtMax0
expect vvtMin2027300
expect vvtMax2027540

Case 6 — K6 a 4.4-litre car is in the top band, 3,600–5,400

given taxablePrice800000
given powertraincombustion
given engineLitres4.4
expect purchaseTax80000
expect vvtMin3600
expect vvtMax5400

Case 7 — K7 1.0 litre exactly is the lowest band, 60–360

given taxablePrice60000
given powertraincombustion
given engineLitres1
expect vvtMin60
expect vvtMax360

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 China 车辆购置税 (vehicle purchase tax) calculator

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