Skip to main content

Tax

Vodia Billing can compute tax itself, or hand tax computation to your accounting package. Which of those applies is a per-tenant decision, and it is kept strictly separate from the question of who emails the invoice.

Who computes tax

Vodia Billing computes it for self-billed tenants and for tenants connected to Xero. Xero records the figures Vodia Billing supplies, because Xero's automated sales tax cannot run on invoices created through its API.

QuickBooks Online computes it for tenants connected to QuickBooks. QuickBooks is an external tax authority: Vodia Billing supplies the lines, and QuickBooks decides the tax and therefore owns the total.

On a QuickBooks tenant the Vodia Billing total and the QuickBooks total may differ. That is expected and correct — the accounting package's number is the authoritative one.

Tax buckets

Tax components apply to one or more of three buckets:

BucketCovers
usageRated calls
recurringSeats, DIDs, licences, support plans
goodsOne-time charges from the catalogue

Buckets exist because real tax regimes are not uniform. A US telecoms bill typically carries sales tax across all three, a universal service fee on usage only, and a regulatory charge on usage only. Buckets let you express that without inventing separate invoices.

Tax components

A tax profile is a list of components. Each has:

  • Label — printed on the invoice, e.g. "Sales Tax", "USF", "GST"
  • Kind — percentage, or a flat amount
  • Rate — the percentage, or the flat amount
  • Applies to — which buckets
  • Counts — for flat components, what the quantity is measured on
  • Compound — whether it is computed on the subtotal plus preceding components, or on the subtotal alone

A flat component with counts: entity uses the entity line quantity on the invoice, not the licensed seat count. A per-line 911 fee therefore tracks what was actually billed.

Profiles are copied, not linked

Tax → profiles is where you build a tax position once. Applying it to a tenant copies the components onto that tenant.

Editing the profile afterwards changes nothing on tenants that already have it applied. To roll a change out, re-apply the profile.

Why copy and not link

A linked profile edited in June would silently re-cut the tax on invoices issued in May. An invoice must always be reproducible exactly as it was issued, so tax lives on the tenant, at the moment it was applied.

Discounts and credits

Discounts apply before tax. A discount reduces the tax base, and reaches each bucket's base individually — a usage discount reduces the base that usage-only components like USF and PUC are computed on.

Discounts travel to both Xero and QuickBooks as their own negative line, so QuickBooks taxes the discounted base rather than the gross.

Credits apply after tax. A credit is money the customer already owes, so taxing it again would be wrong. Credits are recorded as adjustment links rather than balance decrements, which means voiding an invoice restores the credit rather than destroying it.

Credits can only be issued from within Vodia Billing on tenants where Vodia Billing owns the tax. On a QuickBooks tenant, raise the credit note in QuickBooks; the credit control is greyed out and the API refuses the request rather than producing a number that disagrees with the accounting package.

Rounding

Invoice subtotals are rounded to cents before tax is computed. Tax is then computed on that rounded base.

This is why the lines printed on an invoice always sum to the invoice total, and why a divergence check against an accounting package cannot be tripped by a rounding remainder.

Verifying a new tax configuration

Always check the first invoice of a new tax configuration by hand. Compute each component yourself from the printed subtotals and compare. Tax is the one area where a wrong configuration produces an invoice that looks entirely normal.

Verify GST on discounted Australian invoices

If you bill Australian customers and use discounts, check the GST figure on the first such invoice by hand in Xero before sending it. The discount travels as its own negative line, so GST should be computed on the discounted base.

Worked examples

A US telecoms tax profile

ComponentKindRateApplies toCountsCompound
Sales Taxpercent8.25%usage, recurring, goodsno
USFpercent1%usageno
PUCpercent2%usageno
911 Feeflat0.35recurringentityno

Applied to an invoice

usage      19.57
recurring 696.00
goods 89.00
---------------
subtotal 804.57

Sales Tax, all three buckets:

804.57 x 0.0825 = 66.377025  ->  66.38

USF, usage only:

19.57 x 0.01 = 0.1957  ->  0.20

PUC, usage only:

19.57 x 0.02 = 0.3914  ->  0.39

911 Fee, flat, counting entity lines on the recurring bucket:

The recurring bucket here contains 42 extensions, 3 hunt groups, 18 DIDs and one flat support plan. Only the first two are entities:

42 + 3 = 45 entity units
45 x 0.35 = 15.75

The DID line and the support plan are recurring but not entities, so they attract no 911 fee. That is precisely what counts: entity means, and it is also why the fee tracks what was actually billed rather than the licensed seat count.

Tax = 66.38 + 0.20 + 0.39 + 15.75 = 82.72
Total = 804.57 + 82.72 = 887.29

Why usage-only buckets matter

If USF and PUC had applied to all three buckets instead of usage alone:

804.57 x 0.01 = 8.05    instead of 0.20
804.57 x 0.02 = 16.09 instead of 0.39

A $23 error on one invoice, every month, on every customer, from two checkboxes. Check the bucket assignment of every component on your first invoice.

A discount reaching the tax base

A 10% discount on usage, applied before tax:

Usage             19.57
Usage discount -1.96
------
Usage net 17.61

Sales Tax 8.25% x 802.61 = 66.22 (was 66.38)
USF 1% x 17.61 = 0.18 (was 0.20)
PUC 2% x 17.61 = 0.35 (was 0.39)
911 Fee 0.35 x 45 = 15.75 (unchanged)

All three percentage components moved, because the discount reduced the base each one is computed on. A system that discounted only the final total would have got the usage-only components wrong.

A credit, applied after tax

Subtotal        804.57
Tax 82.72
-------
Invoice total 887.29
Credit -50.00
-------
Amount due 837.29

The credit is not taxed, because it is money already owed. It attaches as an adjustment link, so voiding this invoice restores the $50 rather than destroying it.

A single-rate VAT or GST profile

ComponentKindRateApplies to
VATpercent20%usage, recurring, goods
subtotal   804.57
VAT 20% 160.91
-------
total 965.48

Simpler, and the same rules apply: rounded to cents before tax, discounts before, credits after.

Compound components

A component marked compound is computed on the subtotal plus the components before it, rather than on the subtotal alone. Order matters.

subtotal                        100.00
Levy 5% (not compound) 5.00 on 100.00
Sales Tax 10% (compound) 10.50 on 105.00
-------
total 115.50

Without the compound flag the sales tax would be 10.00, on 100.00. Only mark a component compound if your jurisdiction actually taxes the levy.

→ Full invoice arithmetic: Worked Example