Skip to main content

E-commerce and marketplaces

Checkout tax that survives an audit.

The tax charged at the till and the tax in the ledger are the same number, because they come from the same engine — posted idempotently, hash-chained, in both the order currency and your base currency.

JE-2024-0417Supplier invoice — office equipment
Needs review

Extracted from INV-88213.pdf

Double-entry journal JE-2024-0417, Supplier invoice — office equipment
AccountDebitCredit
6300 Office equipmentNet of recoverable VAT£2,000.00
2201 VAT recoverableStandard rate, 20%£400.00
2100 Accounts payableDue 30 days£2,400.00
Totals£2,400.00£2,400.00
Debits equal credits

Nothing posts until an accountant approves it. The entry stays at needs-review until then.

What actually goes wrong

The problem is never the rate. It is the reconciliation.

Getting a rate approximately right is easy. Proving twelve months later that the amount collected, the amount recorded and the amount remitted are the same amount is the part that fails.

  • Every order is a different jurisdiction

    State and local sales tax, EU VAT, GST — different bases, different rounding, different rules about what shipping is. The same product is three different calculations depending on where it lands.

  • Reverse charge either applies or it does not

    Cross-border B2B in the EU shifts the liability to the buyer, and getting it wrong is wrong in both directions — charging when you should not, or not charging when you should.

  • Nexus thresholds move underneath you

    Economic nexus is a running total you crossed three weeks ago without noticing. By the time it shows up, the under-collected orders have already shipped.

  • Exemption certificates live in a drawer

    A customer is exempt, someone knows about it, and nothing in the system does. The certificate exists but it is not attached to anything the checkout can read.

  • Refunds break the arithmetic

    A partial refund has to prorate the tax across the original lines. Do it approximately and the ledger stops tying out to the orders, one refund at a time.

  • The storefront and the books disagree

    Two systems computing tax separately will diverge. Not dramatically — by rounding, by timing, by currency conversion — which is worse, because it takes a full reconciliation to find.

What the product does

One engine, two places, the same number.

The checkout and the ledger are not two implementations that agree most of the time. They are one calculation, recorded once, with the source order referenced from the entry it produced.

  • Indirect tax with the categories that exist

    Standard, reduced, zero-rated and exempt; registration thresholds; reverse charge for cross-border B2B including intra-EU and imports; US state and local. Decimal arithmetic throughout.

    Commerce and indirect tax
  • Tax-ID validation across 100+ national schemes

    VAT numbers, GSTIN, EIN, ABN, RFC, CNPJ and more, with checksum validation rather than a format regex. This is a dimension where parity with the established providers genuinely exists, so it is stated as parity rather than as an advantage.

    More than 100 national tax-ID schemes validated.

  • Nexus rules with point-in-time snapshots

    Economic and physical nexus evaluated as rules, and snapshotted — so “was I registered when this order shipped” has an answer rather than a reconstruction.

  • Exemption certificates the checkout can read

    Matched by customer, email or certificate, scopable by country and state, with the certificate itself stored against the match. EU reverse charge applies automatically when a customer holds a tax ID in a different EU country from the active registration.

  • Refund tax proration that ties out

    Refunds carry prorated tax-refund metadata plus the original line-level tax detail, so the reconciliation has both the derived figure and what it was derived from.

  • Commerce-to-ledger sync, idempotent and chained

    A paid order is split into revenue, tax and shipping and posted as a ledger entry keyed on an idempotency key, so a re-run never duplicates. Entries are hash-chained per tenant with a back-reference to the source order.

    Ledger entries are hash-chained per tenant, and a command validates the whole chain.

Order to ledger

What happens between the button and the books.

Six steps, and the point of the sequence is that the number computed at step two is the number that reaches step six. Nothing recomputes it on the way.

  1. 01

    Identify the transaction

    Place of supply, customer type, and whether a valid tax ID in another EU member state shifts this into reverse charge. Tax IDs are checksum-validated, not pattern-matched.

  2. 02

    Calculate at checkout

    Configured region rates from the parameter store, in decimal, with the exemption and nexus rules applied. Not a live rate feed — the page says so on the coverage side too.

  3. 03

    Issue the invoice

    One tax invoice per order with both tax IDs, the currency, an exchange-rate snapshot, line items, the tax records, a checksum and a signed download reference.

  4. 04

    Post to the ledger

    On payment the order is split into revenue net of discounts, tax and shipping, in both the order currency and your base currency, and written as a ledger entry keyed on an idempotency key.

  5. 05

    Handle the refund

    Tax is prorated across the original lines and the line-level detail travels with it, so a partial refund leaves the reconciliation intact rather than approximately intact.

  6. 06

    Reconcile and detect

    A nightly scan cross-references invoices, orders and refunds against the tax revenue ledger for missing payments, missing invoices, amount mismatches, duplicate invoices and unexpected refunds — five anomaly types, deduplicated by fingerprint.

What an auditor asks

The questions that come after the sale.

An audit is not about whether your rates were right on the day. It is about whether you can show what you charged, what you recorded and what you remitted, and demonstrate they are the same.

  • The ledger is tamper-evident

    Entries are hash-chained per tenant — previous hash into entry hash — with a back-reference to the source order, and a CLI command validates the whole chain. Changing one historical entry invalidates everything after it.

    Ledger entries are hash-chained per tenant, and a command validates the whole chain.
  • A re-run cannot double-count

    Entries are keyed on an idempotency key, so replaying a sync after an incident produces the same ledger rather than a second copy of a week's revenue.

  • Both currencies, with the rate that was used

    Orders persist their base currency, exchange rate, provider and as-of date. A conversion done last March can be checked against the rate that was actually applied, not against today's.

  • Five anomaly types, checked nightly

    Missing payment, missing invoice, amount mismatch, duplicate invoice and unexpected refund — each with severity, expected-versus-actual amounts and a dedupe fingerprint. A finding a human has resolved is never silently reopened.

    5 ledger anomaly types detected.
Before you migrate anything

The three that decide it.

Migration, latency and what happens when something upstream fails. The third one is where most answers get vague, so it is answered specifically here.

For online sellers

Run a week of real orders through it.

Point it at last week's orders, including the refunds and the cross-border ones, and compare what comes out against what you charged. That comparison is the whole evaluation.

TaxOrch provides decision support, not professional tax advice. Exact results apply only within declared coverage. TaxOrch does not file returns or execute payments. Review all outputs before filing.