mibo / vat
增值税抽象的PHP库
2.0.1
2023-11-05 13:43 UTC
Requires
- php: ^8.1
- mibo/taxonomy: ^1.1
Requires (Dev)
- jetbrains/phpstorm-attributes: ^1.0
- nesbot/carbon: ^2.71
- php-parallel-lint/php-parallel-lint: ^1.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.5
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/php-invoker: ^4.0
- phpunit/phpunit: ^10.1
- slevomat/coding-standard: ^8.13
README
该库提供了增值税(Value Added Tax)的常见结构。它包含
- 增值税枚举,表示增值税率(无、标准、减税、第二次减税、超级减税、停车、组合)
- 增值税对象,包含主要增值税信息
- 增值税率
- 适用增值税的国家
- 适用增值税的货物或服务的分类
- 转换器接口,允许将增值税对象转换为另一个国家的对象
为何库被写成这样
增值税率仅是一个简单的标志,表示增值税的百分比,但仅限于特定国家。仅凭增值税率不能确定国家,也不能仅凭国家确定增值税率。要做到这一点,需要知道货物或服务的分类(如CPA产品分类、CN产品分类等)。基于分类,可以确定任何国家的增值税率。
由于分类数量众多以及缺乏存储和访问每个分类数据的信息格式,因此此处没有实现转换器。
增值税率
增值税率列表来自欧盟
- 标准(强制)
- 减税(强制)
- 第二次减税(可选)
- 超级减税(可选)
- 停车(可选)
下一个常用的增值税率是
- 无
除了这些增值税率之外,还包括两个增值税率用于开发目的
- 组合
- 该税率用于确定货物和/或服务列表包含不同增值税率的金额。这样可以避免对含增值税的价格的错误计算。
- 任何
- 该税率仅应供开发者使用。该税率主要创建用于折扣价格,这些折扣价格仅在稍后应用于货物和/或服务,并且在此之前不知道该折扣的增值税率(如果未限制为特定税率)。
安装
composer require mibo/vat
用法
/** @var \MiBo\Taxonomy\Contracts\ProductTaxonomy $classification */ $classification = {...}; $vat = \MiBo\VAT\VAT::get('SVK', \MiBo\VAT\Enums\VATRate::NONE, $classification, \Carbon\Carbon::now());
注意:当指定增值税率和分类时,当Resolver发现该分类对于指定的增值税率无效时,增值税率可能会稍后更改。 因此,创建增值税对象更好的方法是
\MiBo\VAT\Contracts\VATResolver::retrieveVAT($classification, 'SVK', \Carbon\Carbon::now());
更改另一个国家的增值税
$vat = \MiBo\VAT\Contracts\Convertor::convert($vat, 'CZE', \Carbon\Carbon::now());
目前,国家代码未经检查,接受任何字符串值。以后可能会指定是否使用ISO标准的两位或三位字母国家代码。
更改或应用Resolver和转换器
$manager = new \MiBo\VAT\Manager($myConvertor, $myValueResolver, $myVATResolver);