mpociot / vat-calculator
按照正确的方式计算欧盟增值税。
Requires (Dev)
- illuminate/contracts: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- mockery/mockery: ^1.3.3
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.0
- 3.x-dev
- 3.12.0
- 3.11.0
- 3.10.1
- 3.10.0
- 3.9.0
- 3.8.0
- 3.7.0
- 3.6.0
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.2
- 3.0.1
- 3.0.0
- 2.x-dev
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.7.1
- 1.7.0
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.0
- dev-main
This package is auto-updated.
Last update: 2024-09-02 06:26:41 UTC
README
以正确的方式处理所有与欧盟MOSS税/增值税规定相关的困难。与 Laravel 和 Cashier 集成 — 或在 独立的 PHP 应用程序中使用。最初由 Marcel Pociot 创建。
// Easy to use! VatCalculator::calculate(24.00, $countryCode = 'DE'); VatCalculator::calculate(24.00, $countryCode, $postalCode); VatCalculator::calculate(71.00, 'DE', '41352', $isCompany = true); VatCalculator::getTaxRateForLocation('NL'); // Check validity of a VAT number VatCalculator::isValidVATNumber('NL123456789B01');
警告
此包不提供关于正确计算税款的任何保证。您仍需确保任何计算的税款适用于您的用例。如果您不确定某个税款是否正确,最好与会计师交谈。
需求
- PHP 7.3 或更高版本
- (可选) Laravel 6.0 或更高版本
安装
使用 composer 安装此包
composer require mpociot/vat-calculator
独立使用
您还可以在不使用 Laravel 的情况下使用此包。只需创建一个 VatCalculator 的新实例并使用它即可。所有文档示例都使用 Laravel Facade 代码,所以请确保不要将方法作为静态方法调用。
use Mpociot\VatCalculator\VatCalculator; $vatCalculator = new VatCalculator(); $vatCalculator->setBusinessCountryCode('DE'); $grossPrice = $vatCalculator->calculate(49.99, $countryCode = 'LU');
升级
在升级库时,请参阅升级指南
。
用法
计算含税价格
要计算含税价格,请使用带有净价格和国家代码参数的 calculate
方法。
$grossPrice = VatCalculator::calculate(24.00, 'DE');
第三个参数是客户的邮政编码。
作为第四个参数,您可以传递一个布尔值,表示客户是公司还是个人。如果是公司(您应该通过验证增值税号来检查),则返回净价格。
$grossPrice = VatCalculator::calculate(24.00, 'DE', '12345', $isCompany = true);
获取更多信息
计算含税价格后,您可以从 VatCalculator 中提取更多信息。
$grossPrice = VatCalculator::calculate(24.00, 'DE'); // 28.56 $taxRate = VatCalculator::getTaxRate(); // 0.19 $netPrice = VatCalculator::getNetPrice(); // 24.00 $taxValue = VatCalculator::getTaxValue(); // 4.56
验证欧盟增值税号
在验证客户的增值税号之前,您可以使用 shouldCollectVAT
方法检查是否需要收集增值税。
if (VatCalculator::shouldCollectVAT('DE')) { // This country code requires VAT collection... }
要验证客户的增值税号,请使用 isValidVATNumber
方法。增值税号应采用VIES规定的格式。将截断提供的增值税号,并自动删除无关字符/空白。
此服务依赖于由欧盟提供的第三方 SOAP API。如果由于任何原因该 API 不可用,则将抛出 VATCheckUnavailableException
。
try { $validVAT = VatCalculator::isValidVATNumber('NL 123456789 B01'); } catch (VATCheckUnavailableException $e) { // The VAT check API is unavailable... }
此外,还可以验证VIES指定的增值税号格式。如果您不想等待 SOAP API 的响应,这很有用。
// This check will return false because no connection to VIES could be made... $validVAT = VatCalculator::isValidVATNumber('NL 123456789 B01'); // This check will return true because only the format is checked... $validVAT = VatCalculator::isValidVatNumberFormat('NL 123456789 B01');
获取欧盟增值税号详情
要获取增值税号的详细信息,请使用 getVATDetails
方法。增值税号应采用VIES规定的格式。将截断提供的增值税号,并自动删除无关字符/空白。
此服务依赖于由欧盟提供的第三方 SOAP API。如果由于任何原因该 API 不可用,则将抛出 VATCheckUnavailableException
。
try { $vat_details = VatCalculator::getVATDetails('NL 123456789 B01'); print_r($vat_details); /* Outputs stdClass Object ( [countryCode] => NL [vatNumber] => 123456789B01 [requestDate] => 2017-04-06+02:00 [valid] => false [name] => Name of the company [address] => Address of the company ) */ } catch (VATCheckUnavailableException $e) { // The VAT check API is unavailable... }
英国增值税号
英国增值税号的格式略有不同
try { $vat_details = VatCalculator::getVATDetails('GB 553557881'); print_r($vat_details); /* Outputs array(3) { ["name"]=> string(26) "Credite Sberger Donal Inc." ["vatNumber"]=> string(9) "553557881" ["address"]=> array(3) { ["line1"]=> string(18) "131B Barton Hamlet" ["postcode"]=> string(8) "SW97 5CK" ["countryCode"]=> string(2) "GB" } } */ } catch (VATCheckUnavailableException $e) { // The VAT check API is unavailable... }
Laravel
配置
默认情况下,VatCalculator 预定义了所有欧盟增值税规则,以便可以轻松更新,如果某个国家的规则发生变化。
如果您需要定义其他增值税税率,可以通过发布配置并添加更多规则来实现。
警告
请确保在配置文件中设置您的业务国家代码,以便在向您本国商业客户销售时正确计算增值税。
要发布配置文件,请运行vendor:publish
命令
php artisan vendor:publish --provider="Mpociot\VatCalculator\VatCalculatorServiceProvider"
这将为您配置目录创建一个vat_calculator.php
文件。
处理SOAP错误
如果VIES API出现故障,某些原因导致SOAP错误发生,这些错误将得到优雅的处理,并返回false
。但是,如果您明确希望了解任何可能的SOAP错误,您可以指示VatCalculator抛出它们作为VATCheckUnavailableException
。然后,VATCheckUnavailableException
将包含SOAP错误的特定消息。
在您的配置文件中将选项设置为true
<?php return [ 'forward_soap_faults' => true, ];
您还可以为SOAP客户端设置超时。默认情况下,SOAP在30秒后终止对VIES的请求。如果您不想等待那么长时间,您可以减少超时时间,例如设置为10秒
<?php return [ 'soap_timeout' => 10, ];
ValidVatNumber验证规则
VatCalculator还附带了一个用于增值税号的ValidVatNumber
验证规则。您可以在验证来自表单请求或独立验证器实例的输入时使用此规则。
use Mpociot\VatCalculator\Rules\ValidVatNumber; $validator = Validator::make(Input::all(), [ 'first_name' => 'required', 'last_name' => 'required', 'company_vat' => ['required', new ValidVatNumber], ]); if ($validator->passes()) { // Input is correct... }
警告
当增值税ID检查SOAP API不可用时,验证器扩展返回false
。
收银员Stripe集成
注意
目前,此包与Cashier Stripe v13或更高版本不兼容,因为它仍然依赖于已从Cashier v13中删除的旧taxPercentage
方法。您仍然可以在同时使用较旧的Cashier Stripe版本。
如果您想将此包与Laravel Cashier Stripe结合使用,可以让您的可计费模型使用BillableWithinTheEU
特质。因为此特质重写了Billable
特质的taxPercentage
方法,我们必须明确告诉我们的模型这样做。
use Laravel\Cashier\Billable; use Mpociot\VatCalculator\Traits\BillableWithinTheEU; use Laravel\Cashier\Contracts\Billable as BillableContract; class User extends Model implements BillableContract { use Billable, BillableWithinTheEU { BillableWithinTheEU::taxPercentage insteadof Billable; } protected $dates = ['trial_ends_at', 'subscription_ends_at']; }
通过使用BillableWithinTheEU
特质,您的可计费模型具有设置可计费模型税率的新方法。
一键设置所有内容
setTaxForCountry($countryCode, $company = false)
或使用更易读的链式方法
useTaxFrom($countryCode)
- 使用给定国家的税率asIndividual()
- 可计费模型不是公司(默认)asBusiness()
- 可计费模型是有效的公司
因此,为了在订阅客户之前设置正确的税率,请考虑以下工作流程
$user = User::find(1); // For individuals use: $user->useTaxFrom('NL'); // For business customers with a valid VAT ID, use: $user->useTaxFrom('NL')->asBusiness(); $user->subscription('monthly')->create($creditCardToken);
变更日志
请查看此存储库中的CHANGELOG以获取所有最近更改。
维护者
VatCalculator由Dries Vints维护。最初由Marcel Pociot创建。
许可证
VatCalculator是开源软件,许可协议为MIT许可证。