Sales tax, GST and VAT on invoices

Put sales tax, GST, HST, QST and VAT from a tax engine on your Wingspan invoices, and keep the engine's records in step as you send, cancel, refund and credit invoices.

Wingspan doesn't calculate sales tax, GST or VAT. A tax engine does, through its API, and you add the result to the Wingspan invoice as tax lines. The engine also keeps the records you file returns from, so each change to an invoice gets a matching call to the engine.

Who does what

StepWho does it
Decide where you register and which taxes applyYou, with your tax advisor
Register with each tax authorityYou
Calculate the tax on each invoiceThe tax engine
Show the tax on the invoice and collect itWingspan
Record each invoice, cancellation, refund and credit for filingThe tax engine, from your calls
File returns and pay the taxThe tax engine's filing service, or you from its reports
Keep exemption certificatesThe tax engine, if it stores them

How tax appears on a Wingspan invoice

Add one line for each tax after the service lines. An invoice for 1,000.00 CAD of services delivered in Montreal carries GST and QST.

LinelineItemTypetotalCostaccounting.taxCode
Clinical staffing, 8 hoursServices1000.00
GST (5%)Custom50.00GST
QST (9.975%)Custom99.75QST

The invoice total is 1,149.75, and the client pays it the same way as any other invoice. accounting.taxCode is your own code for the tax. Wingspan stores it as you send it, so your accounting system can post each tax line to the right liability account.

In Canada, federal GST and provincial QST or PST come back from the engine as separate amounts, so each gets its own line. In the US, one sale can carry state, county and city tax. Add them into one sales tax line, or show a line for each if your clients want the breakdown.

Give each invoice one ID that both systems share. Use an ID of your own, such as your invoice number, because you quote the tax before Wingspan creates the invoice. Send it as the invoice's externalId in Wingspan and as the transaction's ID in the tax engine, which Avalara calls code. When Wingspan sends an event for the invoice, read the invoice's externalId to find the tax record to update.

Keep the engine in step with the invoice

In WingspanCall the tax engine toTrigger
You build or change a draftQuote the tax, without recording itYour own code
You send the invoiceRecord the transactionInvoice.Opened
You change a sent invoiceAdjust the recorded transactionYour own code
You void the invoiceVoid the transactionInvoice.Cancelled
You refund all or part of itRecord a refund for the same amountInvoice.RefundCompleted
You credit part of itRecord a return for the credited amountYour own code, before you create the credit

Record the tax when you send the invoice. Payments, partial payments and failed payments don't change it.

When a credit includes tax, ask the engine for the tax on the credited amount and send it as taxAmount on the credit's line items. See Credits: tax on a credit.

Choose a tax engine

The step-by-step guide uses Avalara AvaTax. It calculates US sales tax and Canadian GST, HST, PST and QST, and it stores exemption certificates. Avalara Managed Returns files US returns from committed transactions. Confirm with Avalara which Canadian returns it files. Avalara also lists VAT and GST calculation for 190+ countries, so UK VAT and Australian GST can run through the same calls later.

Stripe Tax also works with payments made outside Stripe, through its tax calculation and tax transaction APIs. It doesn't validate exemption certificates, and in Canada it files only simplified GST/HST for non-resident businesses.

Whichever engine you use, let it supply the rates. Provincial and local rates change, so don't hardcode them.

Related pages


Did this page help you?