4513 / vat

MIT License
0 stars 0 forks source link

VAT

codecov

The library provides common structures for VAT (Value Added Tax). It contains:

The 'why' the library is written as is:

VAT rate is only a simple flag that indicates the percentage of the VAT, however only for a specific country. The country cannot be determined from the VAT rate alone, nor can the VAT rate be determined from the country alone. To do so, one needs to know the classification of the goods or services (such as CPA product classification, CN product classification, etc.). Based on the classification, the VAT rate can be determined for any country.

No implementation of the convertor is made in here, because of numbers of different classifications and lack of information where data for each classification is stored and accessable in a format that can be used.

VAT Rates

List of the VAT rates comes from EU:

Next VAT rate that is commonly used is

Except of that VAT rates, two more VAT rates are included for development purposes:


Installation

composer require mibo/vat

Usage

/** @var \MiBo\Taxonomy\Contracts\ProductTaxonomy $classification */
$classification = {...};
$vat = \MiBo\VAT\VAT::get('SVK', \MiBo\VAT\Enums\VATRate::NONE, $classification, \Carbon\Carbon::now());

Note that when specifying the VAT rate and the classification, that VAT rate might be later changed when the Resolver finds out that the classification is not valid for the specified VAT rate. Because of that, better way to create a VAT object is:

\MiBo\VAT\Contracts\VATResolver::retrieveVAT($classification, 'SVK', \Carbon\Carbon::now());

To change the VAT for another country:

$vat = \MiBo\VAT\Contracts\Convertor::convert($vat, 'CZE', \Carbon\Carbon::now());

For now, the country code is not checked and accepts any string value. Later it might be specified whether to use two or three-letter country code by ISO standard.

Changing or applying Resolver and Convertor:

$manager = new \MiBo\VAT\Manager($myConvertor, $myValueResolver, $myVATResolver);