PHPackages                             mibo/vat - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mibo/vat

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

mibo/vat
========

PHP Library for VAT abstraction

2.0.1(2y ago)07.8k[2 issues](https://github.com/4513/vat/issues)[1 PRs](https://github.com/4513/vat/pulls)2MITPHPPHP ^8.1CI passing

Since Jun 4Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/4513/vat)[ Packagist](https://packagist.org/packages/mibo/vat)[ RSS](/packages/mibo-vat/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (10)Versions (8)Used By (2)

VAT
===

[](#vat)

[![codecov](https://camo.githubusercontent.com/98e34b257b7cda0b0e105dee63ddb0aec6a5e522ffeab7e82edc822db84d87c8/68747470733a2f2f636f6465636f762e696f2f67682f343531332f7661742f6272616e63682f6d61696e2f67726170682f62616467652e7376673f746f6b656e3d574e6737496c63447650)](https://codecov.io/gh/4513/vat)

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

- VAT Enum that indicates the VAT rate (none, standard, reduced, second reduced, super reduced, parking, combined)
- VAT Object that contains the main VAT information:
    - VAT rate
    - Country for which the VAT applies
    - Classification of the goods or services to which the VAT applies
- Convertor Interface that allows to convert a VAT Object for another country

#### The 'why' the library is written as is:

[](#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

[](#vat-rates)

List of the VAT rates comes from EU:

- Standard (mandatory)
- Reduced (mandatory)
- Second reduced (optional)
- Super reduced (optional)
- Parking (optional)

Next VAT rate that is commonly used is

- None

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

- Combined
    - *The rate is used to determine that a list of goods and/or services contains prices with different VAT rates. That avoids incorrect calculations of price with VAT.*
- Any
    - *The rate should only be used for developers. The rate is created mainly for discount prices that are only later applied on goods and/or services and prior to that one does not know the VAT rate of that discount (if not restricted to a rate)*

---

### Installation

[](#installation)

```
composer require mibo/vat
```

### Usage

[](#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);
```

###  Health Score

39

—

LowBetter than 85% of packages

Maintenance56

Moderate activity, may be stable

Popularity19

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 81% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~38 days

Total

5

Last Release

961d ago

Major Versions

1.0.2 → 2.0.02023-10-03

### Community

Maintainers

![](https://www.gravatar.com/avatar/0866c3280ed62cfc74feb086241ec9ee56bab89b4fa2b8c8a3dbd62508761b6a?d=identicon)[MiBo](/maintainers/MiBo)

---

Top Contributors

[![4513](https://avatars.githubusercontent.com/u/25705559?v=4)](https://github.com/4513 "4513 (17 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")

---

Tags

phpvateueu vatEuropean UnionVAT ratesVAT rate

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/mibo-vat/health.svg)

```
[![Health](https://phpackages.com/badges/mibo-vat/health.svg)](https://phpackages.com/packages/mibo-vat)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
