EU MOSS 税/付加価値税規制に関連するすべての難しい問題を、あるべき方法で処理します。 Laravel および Cashierと統合するか、スタンドアロンのPHP アプリケーションに統合します。オリジナルはマルセル・ポシオによって作成されました。
// 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 ' );
警告
このパッケージは、税金が正しく計算されることを保証するものではありません。計算された税金がユースケースに対して正しいことを確認する責任は依然としてお客様にあります。特定の税金が正しいかどうか不明な場合は、会計士に相談するのが最善です。
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 ' );
ライブラリをアップグレードする場合は、 the upgrade guide
を参照してください。
総額を計算するには、正味価格と国コードをパラメーターとして指定したcalculate
メソッドを使用します。
$ grossPrice = VatCalculator:: calculate ( 24.00 , ' DE ' );
3 番目のパラメータは顧客の郵便番号です。
4 番目のパラメーターとして、顧客が企業であるか個人であるかを示すブール値を渡すことができます。顧客が企業の場合は、VAT 番号を検証して確認する必要があり、正味価格が返されます。
$ 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
特定の国で利用可能なすべての税率を含む配列を取得するには、 getTaxRatesForCountry
メソッドを使用します。
VatCalculator:: getTaxRatesForCountry ( ' DE ' ); // [ "high" = > 0.19 , "low" = > 0.07 ]
顧客の VAT 番号を検証する前に、 shouldCollectVAT
メソッドを使用して、そもそも国コードで VAT の徴収が必要かどうかを確認できます。
if (VatCalculator:: shouldCollectVAT ( ' DE ' )) {
// This country code requires VAT collection ...
}
顧客の VAT 番号を検証するには、 isValidVATNumber
メソッドを使用できます。 VAT 番号は、VIES によって指定された形式である必要があります。指定された VAT 番号は切り捨てられ、関連しない文字や空白は自動的に削除されます。
このサービスは、EU が提供するサードパーティの SOAP API に依存しています。何らかの理由でこの API が使用できない場合は、 VATCheckUnavailableException
がスローされます。
try {
$ validVAT = VatCalculator:: isValidVATNumber ( ' NL 123456789 B01 ' );
} catch ( VATCheckUnavailableException $ e ) {
// The VAT check API is unavailable ...
}
あるいは、VIES で指定された VAT 番号の形式のみを検証することもできます。これは、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 ' );
VAT 番号の詳細を取得するには、 getVATDetails
メソッドを使用できます。 VAT 番号は、VIES によって指定された形式である必要があります。指定された VAT 番号は切り捨てられ、関連しない文字や空白は自動的に削除されます。
このサービスは、EU が提供するサードパーティの SOAP API に依存しています。何らかの理由でこの API が使用できない場合は、 VATCheckUnavailableException
がスローされます。
try {
$ vat_details = VatCalculator:: getVATDetails ( ' NL 123456789 B01 ' );
print_r ( $ vat_details );
/ * Outputs
stdClass Object
(
[ countryCode ] = > NL
[ vatNumber ] = > 123456789 B01
[ 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 ...
}
英国の VAT 番号の形式は少し異なります。
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 ...
}
デフォルトでは、VatCalculator にはすべての EU VAT ルールが事前定義されているため、特定の国で変更があった場合でも簡単に更新できます。
他の VAT レートを定義する必要がある場合は、構成を公開してルールを追加することで定義できます。
警告
自分の国の法人顧客に販売するときに正しい VAT 計算を行うために、設定ファイルに必ず法人の国コードを設定してください。
構成ファイルを公開するには、 vendor:publish
コマンドを実行します。
php artisan vendor:publish --provider= " MpociotVatCalculatorVatCalculatorServiceProvider "
これにより、config ディレクトリにvat_calculator.php
作成されます。
VIES API に障害があるときに何らかの理由で SOAP 障害が発生した場合、これらのエラーは適切に処理され、 false
返されます。ただし、SOAP エラーを明示的に認識したい場合は、それらをVATCheckUnavailableException
としてスローするように VatCalculator に指示できます。 VATCheckUnavailableException
には、SOAP 障害の特定のメッセージが含まれます。
構成ファイルでオプションをtrue
に設定します。
<?php
return [
' forward_soap_faults ' => true ,
];
SOAP クライアントのタイムアウトを設定することもできます。デフォルトでは、SOAP は 30 秒後に VIES へのリクエストを中止します。それほど長く待ちたくない場合は、タイムアウトをたとえば 10 秒に減らすことができます。
<?php
return [
' soap_timeout ' => 10 ,
];
VatCalculator には、VAT 番号の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 ...
}
警告
VAT ID Check SOAP API が使用できない場合、バリデーター拡張機能はfalse
返します。
注記
現時点では、このパッケージは 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
トレイトを使用することにより、請求可能モデルには、請求可能モデルの税率を設定するための新しいメソッドが追加されます。
1 つのコマンドですべてを設定します。
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 によって保守されています。オリジナルはマルセル・ポシオによって作成されました。
VatCalculator は、MIT ライセンスに基づいてライセンス供与されたオープンソース ソフトウェアです。