@acjlabs/au-tax-utils
v0.1.4
Published
Zero-dependency Australian ABN checksum validation and GST math (10% rate, inclusive/exclusive conversions, tax-invoice threshold).
Maintainers
Readme
@acjlabs/au-tax-utils
Zero-dependency Australian tax utilities: ABN checksum validation and GST math. TypeScript, works in Node, Bun, Deno, and the browser — no network calls, no external services.
Install
npm install @acjlabs/au-tax-utilsWhat's in it
ABN validation
import { isValidAbn, formatAbn } from "@acjlabs/au-tax-utils";
isValidAbn("51 824 753 556"); // true — accepts spaced or unspaced input
isValidAbn("51824753557"); // false — checksum fails
formatAbn("51824753556"); // "51 824 753 556"Implements the ATO's weighted modulus 89 checksum (ABR's ABN format reference) — the same algorithm every real Australian Business Number is validated against. This checks that a string is a structurally valid ABN (correct checksum); it does not look up whether the ABN is actually registered or active — for that, query the ABN Lookup API directly.
GST math
import { gstFromInclusive, gstFromExclusive, requiresTaxInvoice } from "@acjlabs/au-tax-utils";
gstFromInclusive(110); // { net: 100, gst: 10 }
gstFromExclusive(100); // { gst: 10, total: 110 }
requiresTaxInvoice(82.5); // true — $82.50 inclusive is the ATO's threshold
requiresTaxInvoice(82.49); // false10% standard-rate GST, correctly-rounded inclusive/exclusive conversions, and the tax-invoice issuance
threshold — $82.50 GST-inclusive (equivalently $75.00 exclusive), per the
ATO's tax-invoices guidance.
This is a common enough point of confusion (inclusive vs. exclusive) that it's worth stating explicitly:
requiresTaxInvoice always takes the GST-inclusive total.
Why this exists
We build Receipt Extraction, a hosted API/MCP server that turns receipt and invoice images into structured JSON with AU GST/ABN handling built in. This package is the small, standalone piece of that: the actual checksum and tax-rate math, with no vision model, no hosting, no API key — just the arithmetic, MIT-licensed, for anyone who needs it on its own.
Scope
This is engineering-reference code, not tax or legal advice. The GST rate, thresholds, and checksum algorithm are current as of 2026 — verify against the ATO's own published guidance (linked above) before relying on this for anything beyond structural validation.
If you need more than structural checksum validation — jurisdiction auto-detection across multiple countries, live registry lookup, or fraud-risk scoring — that is a different shape of tool: a hosted network service that queries the official registries (the ABR here, their equivalents elsewhere), not an offline library. This package stays deliberately offline and zero-dependency, so structural validation is the whole of what it does.
License
MIT
