A PHP library for managing complex tax calculations with support for fluctuating rates, predefined datasets, and customizable resolvers.
CommerceGuys Tax is a PHP library for managing tax calculations in applications that require handling of multi-jurisdictional tax rules. It solves the problem of accurately determining tax rates based on factors like customer location, product type, and date-sensitive rate changes. The library provides a structured data model and resolver system to automate complex tax logic.
PHP developers building e-commerce platforms, financial software, or business applications that need to comply with regional tax regulations. It is particularly useful for projects operating in multiple countries with varying tax laws.
Developers choose this library for its robust handling of fluctuating tax rates, predefined datasets for common regions, and flexible resolver system that can be customized for specific business rules. It reduces the complexity of implementing tax logic compared to building a custom solution from scratch.
A PHP 5.5+ tax library.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports tax rate fluctuations over time with a structured zone-type-rate-amount model, as shown in the French VAT example changing from 19.6% to 20% on a specific date.
Includes resolvers for EU digital goods and Canadian provincial taxes, automating common cross-border tax scenarios without custom code.
Allows creation of custom resolvers for specific rules like tax holidays or product exemptions, enabling adaptation to complex business needs.
Provides entity interfaces and classes compatible with Doctrine, simplifying database persistence and mapping for PHP applications.
Only includes predefined tax rates for EU countries and Switzerland; other regions require manual setup or community contributions, as admitted in the README.
Requires the separate commerceguys/zone library, adding complexity to setup and potential integration hurdles.
Usage involves manual initialization of multiple resolvers and contexts, as shown in the example, which can be cumbersome for quick implementations.