EU 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 ' );
경고
이 패키지는 올바르게 계산된 세금에 대한 어떠한 약속도 제공하지 않습니다. 귀하는 계산된 세금이 귀하의 사용 사례에 맞게 정확한지 확인할 책임이 있습니다. 특정 세금이 정확한지 아닌지 확실하지 않은 경우 회계사와 상담하는 것이 가장 좋습니다.
작곡가를 사용하여 패키지를 설치하십시오.
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 ' );
세 번째 매개변수는 고객의 우편번호입니다.
네 번째 매개변수로 고객이 회사인지 개인인지를 나타내는 부울 값을 전달할 수 있습니다. 고객이 회사인 경우 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 "
그러면 구성 디렉터리에 vat_calculator.php
가 생성됩니다.
어떤 이유로 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 ,
];
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 확인 SOAP API를 사용할 수 없는 경우 유효성 검사기 확장은 false
반환합니다.
메모
현재 이 패키지는 Cashier v13에서 제거된 이전 taxPercentage
방법을 여전히 사용하기 때문에 Cashier Stripe v13 이상과 호환되지 않습니다. 그 동안에는 이전 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 라이선스에 따라 라이선스가 부여된 오픈 소스 소프트웨어입니다.