All articles

Accounting

Sales Tax — Rates, Sur-Tax, Liability vs Collected

How JewelTrak computes sales tax (TaxRate + SurTaxRate over a threshold), why some invoices have $0 tax (out-of-state, wholesale, taxable=0), and the difference between Tax Liability and Tax Collected on reports.

JewelTrak computes sales tax per invoice based on three rate fields stored on the order: TaxRate, SurTaxRate, and SurTaxThreshold. Understanding how they combine is important for jurisdictions like Florida that have a base state rate and a discretionary county “sur-tax” capped at a threshold per item.

How tax is calculated

The base tax applies to the entire invoice subtotal. The surtax cap is applied per item, not per line and not per invoice:

base tax  = subtotal × TaxRate

per line: surtax = min(|lineExt|, qty × SurTaxThreshold) × SurTaxRate
          (algebraically equivalent to giving each item its own SurTaxThreshold cap)

total tax = base tax + Σ (surtax for each line)
  • TaxRate — the base rate that applies to the entire subtotal (e.g. 6% state).
  • SurTaxRate — an additional rate (e.g. 1% county discretionary).
  • SurTaxThreshold — the dollar cap per item above which the SurTaxRate stops applying. Common in Florida ($5,000 cap).

Why per-item matters

A line of qty 3 at $3,000 each is three separate items for surtax purposes — each $3K item is under the $5K cap, so the full $9,000 line gets surtaxed:

3 × $3,000 watches in Florida (6% + 1%, $5,000 cap):
  base   = 9,000 × 0.06                 = $540
  surtax = min(9,000, 3 × 5,000) × 0.01 = $90    (full line under per-item cap)
  total                                 = $630

Contrast a single $8,000 item — only $5,000 of it gets surtaxed:

1 × $8,000 watch in Florida (6% + 1%, $5,000 cap):
  base   = 8,000 × 0.06                 = $480
  surtax = min(8,000, 1 × 5,000) × 0.01 = $50    (capped at one item × threshold)
  total                                 = $530

Service lines (StockType = ‘S’) are treated as a single item — the cap applies once to the line’s full amount.

Why this changed. Earlier versions capped surtax against the invoice subtotal as a whole, which under-collected on multi-quantity lines above the threshold. The math now matches the Florida DOR guidance (and equivalent rules in other surtax states): each item carries its own cap.

Rates are stored as decimals (0.06 = 6%) — the display layer converts to percentages.

Where the rates come from

Rates are per invoice, written at order creation time, copied from:

  1. The store’s default rates (Settings → Stores → [store] → Tax setup), OR
  2. The customer’s override (some out-of-state customers have their own tax setup).

You can edit the rates on an individual invoice if needed — the saved rate is what’s used for the calculation.

When tax is $0

A $0 tax line on an invoice means one of:

  • Taxable = 0 on the order header — the customer is tax-exempt or the sale qualifies (out-of-state ship-to, resale certificate on file, etc.).
  • Wholesale customer — the customer’s contact type is Wholesale or they’re a vendor; sales to wholesale don’t generally collect tax.
  • TaxRate = 0 — the store has no rate configured (rare; usually a setup oversight).

The Sales Tax Liability report breaks invoices into three sections: Retail Taxable, Retail Non-Taxable, and Wholesale, so you can see which bucket a tax-free sale fell into.

Tax Liability vs Tax Collected

On the report, both columns usually show the same number — but they can diverge:

  • Tax Liability = what the formula says you owe based on the invoice subtotals (the calculated amount).
  • Tax Collected = what you actually charged the customer.

In the current model, these are equal — every invoice’s tax is the calculated value. The two columns exist for jurisdictions where you might collect a different amount (e.g. invoice-level tax overrides). If you don’t override, expect them to match.

$0 invoice filter

The Sales Tax Liability report has an Adjusted-to-$0 filter:

  • Include (default): show invoices where line items existed but a 100% Adjustment netted them to $0.
  • Exclude: hide those rows entirely. Useful when those comp invoices are noise in the report.

The dollar totals don’t change between Include and Exclude — by definition the excluded invoices contribute $0 to every money column. Only the invoice count changes.

Tips

  • File the Sales Tax Liability report monthly with your state’s sales tax return.
  • The Tax Collected total should match what you remit to the state (down to the rounding rules — JewelTrak rounds per-line at 2 decimals).
  • For a customer who claims tax-exempt status, mark Taxable = 0 on the invoice and record their resale-certificate number on the contact record so the verification + audit trail lives in JewelTrak. See Resale Certificates for the capture + verify workflow.
  • If you ship to multiple states, set up a per-customer rate override or use the customer’s default address to drive the rate.