Skip to main content

OpenSalesTax connector for Odoo 19 — destination-based US sales tax via the OpenSalesTax engine

Project description

opensalestax-odoo

License: LGPL v3 Odoo 16.0 Odoo 17.0 Odoo 18.0

Destination-based US sales tax for Odoo Community. Replaces static tax-rate configuration with live calculation against an OpenSalesTax engine — your own self-hosted instance, no per-transaction fees, no SaaS lock-in.

The free, self-hostable answer to Avalara on Odoo Community.

Branch matrix

This repo follows the OCA convention: one branch per Odoo major version. Pick the branch matching your Odoo install. Releases are independent per branch.

Odoo version Branch PyPI artifact
16.0 16.0 odoo-addon-account-ostax==16.0.*
17.0 17.0 odoo-addon-account-ostax==17.0.*
18.0 18.0 odoo-addon-account-ostax==18.0.*
19.0 planned for v0.2 at GA (~Oct 2026)

What you get

  • Sales orders, customer invoices, credit notes/refunds, vendor bills, POS, purchase orders — all with destination-based per-jurisdiction US tax
  • Per-jurisdiction breakdown stored on every move (state / county / city / district), rendered on the form view for full audit trail
  • Customer exemption certificates on res.partner
  • Multi-company support — settings scoped per company
  • Fiscal-position interop — non-US partners route through Odoo's standard "Export" mapping; the connector only engages for US shipping addresses
  • Settings page with engine connection test, cache TTL, fail-soft toggle
  • Optional admin debug log of recent calculations

Install

# Match the branch to your Odoo major:
pip install opensalestax  # the Python SDK
pip install odoo-addon-account-ostax==18.0.0.1.0  # this connector for Odoo 18

# Or install from source:
git clone -b 18.0 https://github.com/ejosterberg/opensalestax-odoo.git
cd opensalestax-odoo
# Symlink or copy account_ostax/ into your Odoo addons-path

Then in Odoo: Apps → search "OpenSalesTax" → Install, then Settings → Accounting → OpenSalesTax to configure the engine URL.

How it works

The connector overrides account.tax.compute_all. When a US partner with a valid 5-digit ZIP is on a sale order / invoice / POS order / vendor bill, compute_all calls the OpenSalesTax engine via the Python SDK and replaces the static catalog rate with the engine's per-jurisdiction breakdown. Non-US partners fall through to Odoo's standard fiscal-position handling.

Calculation only

Tax calculations are provided as-is for convenience. The merchant is solely responsible for tax-collection accuracy and remittance to the appropriate jurisdictions. Verify against your state Department of Revenue before remitting.

This module does NOT file returns, remit collected tax, validate addresses, or provide legal/tax advice.

License

LGPL-3 (or-later) per the project's per-platform license carve-out. Apache-2.0 SDK consumed. DCO sign-off required on every commit; no AI co-author trailers. See CONTRIBUTING.md.

Status

18.0 branch — v0.1.0 shipped 2026-05-06. Production-grade.

The release closes the alpha gap: invoice tax replacement on Odoo 18 now works end-to-end via the canonical _add_tax_details_in_base_lines hook. A merchant deploying this gets correct destination-based US sales tax on every customer invoice, credit note, and sale order, with per-jurisdiction tax lines (state / county / city / district) visible on the form and engine audit JSON in the OpenSalesTax tab.

Verified end-to-end on Odoo 18 + Postgres 16 + l10n_generic_coa: $100 invoice to MSP (ZIP 55401) produces amount_tax=9.03 with 6 jurisdiction lines. Refunds sign-flip correctly. 32 unit tests pass.

17.0, 16.0, and 19.0 branches follow this same pattern (with version-appropriate adjustments).

Production use case: the maintainer's own Odoo 16 install (currently mid-migration to Odoo 19 + PostgreSQL on Debian 13 — see the sibling project) will run this connector on the matching branch once migration completes.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odoo_addon_account_ostax-19.0.0.1.3.tar.gz (28.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odoo_addon_account_ostax-19.0.0.1.3-py3-none-any.whl (30.3 kB view details)

Uploaded Python 3

File details

Details for the file odoo_addon_account_ostax-19.0.0.1.3.tar.gz.

File metadata

File hashes

Hashes for odoo_addon_account_ostax-19.0.0.1.3.tar.gz
Algorithm Hash digest
SHA256 fe4d555ebfb1f916ab589dc7167f9e16ebd5f8050deb5ee8544d53e12ba432ba
MD5 070b8735a70cf15dcb929c08a9eef500
BLAKE2b-256 8542f7a1adbb55ded3417621b78a96700371f1f0c3934fe0484c2a01f7bbcc5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for odoo_addon_account_ostax-19.0.0.1.3.tar.gz:

Publisher: publish.yml on ejosterberg/opensalestax-odoo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file odoo_addon_account_ostax-19.0.0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for odoo_addon_account_ostax-19.0.0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d9e2e5abf1f5b839b80a531bbfbfda7f5ff371e97815219e180e7e484dcdfd60
MD5 008c93be0036dbb03446eff3561e02dd
BLAKE2b-256 7b670f4f1a8b2325f71898c3f525612a8a062b4b69949a9eb38114e40cc52319

See more details on using hashes here.

Provenance

The following attestation bundles were made for odoo_addon_account_ostax-19.0.0.1.3-py3-none-any.whl:

Publisher: publish.yml on ejosterberg/opensalestax-odoo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page