Skip to content

Releases: cboxdk/laravel-tax

v0.1.3

Choose a tag to compare

@sylvesterdamgaard sylvesterdamgaard released this 17 Jul 18:27

Real, cited, no-fabrication tax data (additive, backward-compatible).

  • Live EU VAT rate feed — binds the public, MIT-licensed ibericode/vat-rates dataset (a community compilation, honestly not labelled as the official EU TEDB) via IbericodeVatRateSource, composed as ChainTaxRateSource(feed → static fallback) when tax.eu_vat.enabled. Static snapshot stays the zero-config default. Reduced bands surface only from an operator-supplied category map.
  • US per-state SaaS taxability — a curated StaticProductTaxability::unitedStatesSaas() map covering 40 states where two dated authoritative compilations (TaxJar + Anrok) agree, each cited in docs. The 7 conflicting/partial/home-rule states are deliberately left for the operator to configure.
  • US economic-nexus thresholds — a cited StaticNexusThresholds table (Sales Tax Institute) with AND/OR combinators; UsSalesTaxRegime flags a likely obligation but nexus is still asserted by explicit registration.

Everything sourced from primary/authoritative references; undetermined jurisdictions are omitted (operator-owned), never invented. US rooftop/local rates still not shipped (documented).

v0.1.2

Choose a tag to compare

@sylvesterdamgaard sylvesterdamgaard released this 16 Jul 17:34

Backward-compatible tax-correctness additions (stays within consumers' ^0.1).

  • EU OSS €10k threshold sourcing (Art. 59c): a below-threshold, non-opted single-Member-State seller charges origin VAT on cross-border B2C; opted-in/over-threshold charges destination. Deny-by-default → destination.
  • Category-aware reduced-rate resolution: the rate-source now honors TaxCategory and can resolve a RateBand (reduced/zero) when the bound source supplies one. No national reduced-rate data is fabricated — bands are source-driven.
  • Per-subdivision return aggregation: returns group by country + subdivision (US state) and per-member-state (EU OSS), so a TaxReturn can drive a real filing.
  • TedbRateSource (config-driven, TAX_TEDB_URL): reads a documented TEDB-derived dataset shape, auto-composed as ChainTaxRateSource(TEDB → static) only when configured. No endpoint hardcoded.
  • Honest US docs: US is marked LOGIC-ONLY / not production-ready — per-state SaaS taxability, rooftop local rates, and nexus thresholds require real datasets before invoicing US customers.

Additive/backward-compatible: SellerRegistrations gained an optional $oss; no consumer signature broke.

v0.1.1 — Laravel 13 requirement fix

Choose a tag to compare

@sylvesterdamgaard sylvesterdamgaard released this 15 Jul 13:11

Corrects the framework constraint to Laravel 13 (illuminate/* ^13.0). The ^12 claim in v0.1.0 was not installable: brick/money ^0.14 requires brick/math >=0.15 (RoundingMode enum) while Laravel 12 caps brick/math at ^0.14. No API changes. CI now runs the PHP 8.4/8.5 x Laravel 13 matrix.

v0.1.0 — self-hostable global tax engine

Choose a tag to compare

@sylvesterdamgaard sylvesterdamgaard released this 15 Jul 09:53

First release of Cbox Tax — a self-hostable consumption-tax engine for Laravel that owns the calculation logic and sources only rate data behind pluggable contracts. Built on cboxdk/laravel-geo.

Coverage — ~52 jurisdictions, every rate primary-source verified

  • EU VAT (27, Art. 44/45/58 + intra-EU B2B reverse charge)
  • National VAT/GST: UK, CH, NO, AU, NZ, MX, Singapore, Taiwan, UAE, Saudi Arabia, Bahrain, Oman, Türkiye, Chile, Indonesia, Vietnam, Philippines, Japan, South Korea, Thailand, Ukraine
  • India (dual GST — IGST vs CGST+SGST, OIDAR)
  • Malaysia (SST — charges B2B+B2C, no reverse charge)
  • US sales tax (nexus + per-state taxability + state/rooftop rate) and Canada (province-level)

We omit rather than ship an unverified rate — see docs/coverage for the honest not-yet-supported list (China, Argentina, Pakistan provinces, and a rate-known/mechanics-pending batch).

Capabilities

  • Multi-entity / seller-of-record routing (tax = f(seller registrations, buyer, product))
  • Reverse-charge with VAT-ID validation (VIES · HMRC · ABN), fail-safe on outage
  • Address geocoding (Geocodio) for US rooftop resolution
  • Composable rate sources (static · remote feed · caching · chain)
  • Return-data aggregation for filing
  • Deny-by-default throughout: unmodelled jurisdiction or missing rate → refuse, never a silent 0%

Quality

PHP ^8.4 · Laravel ^12 || ^13. Gate green: pint · phpstan level max · 50 tests · license-check · CycloneDX SBOM · composer audit.

Status: early / pre-1.0. Rates are illustrative defaults unless a live source is bound; external adapters (VIES/HMRC/ABN/Geocodio/remote feeds) implement documented shapes — verify against the live services before production.