mibo/vat

增值税抽象的PHP库

2.0.1 2023-11-05 13:43 UTC

This package is auto-updated.

Last update: 2024-09-08 20:54:15 UTC


README

codecov

该库提供了增值税(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);