Behandeln Sie alle schwierigen Dinge im Zusammenhang mit den MOSS-Steuer-/Mehrwertsteuervorschriften der EU so, wie es sein sollte. Integriert sich in Laravel und Cashier – oder in eine eigenständige PHP-Anwendung. Ursprünglich erstellt von 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 ' );
Warnung
Dieses Paket gibt keine Zusicherungen für korrekt berechnete Steuern. Sie sind weiterhin dafür verantwortlich, sicherzustellen, dass die berechnete Steuer für Ihren Anwendungsfall korrekt ist. Wenn Sie unsicher sind, ob eine bestimmte Steuer korrekt ist oder nicht, sprechen Sie am besten mit einem Buchhalter.
Installieren Sie das Paket mit Composer:
composer require mpociot/vat-calculator
Sie können dieses Paket auch ohne Laravel verwenden. Erstellen Sie einfach eine neue Instanz des VatCalculators und verwenden Sie diese. Alle Dokumentationsbeispiele verwenden den Laravel Facade-Code. Stellen Sie daher sicher, dass Sie die Methoden nicht so aufrufen, als wären sie statische Methoden.
use Mpociot VatCalculator VatCalculator ;
$ vatCalculator = new VatCalculator ();
$ vatCalculator -> setBusinessCountryCode ( ' DE ' );
$ grossPrice = $ vatCalculator -> calculate ( 49.99 , $ countryCode = ' LU ' );
Bitte beachten Sie beim Upgrade der Bibliothek the upgrade guide
.
Zur Berechnung des Bruttopreises verwenden Sie die calculate
mit einem Nettopreis und einem Ländercode als Parameter.
$ grossPrice = VatCalculator:: calculate ( 24.00 , ' DE ' );
Der dritte Parameter ist die Postleitzahl des Kunden.
Als vierten Parameter können Sie einen booleschen Wert übergeben, der angibt, ob es sich beim Kunden um ein Unternehmen oder eine Privatperson handelt. Handelt es sich bei dem Kunden um ein Unternehmen, was Sie durch Validierung der Umsatzsteuer-Identifikationsnummer überprüfen sollten, wird der Nettopreis zurückgegeben.
$ grossPrice = VatCalculator:: calculate ( 24.00 , ' DE ' , ' 12345 ' , $ isCompany = true );
Nach der Berechnung des Bruttopreises können Sie dem Mehrwertsteuerrechner weitere Informationen entnehmen.
$ grossPrice = VatCalculator:: calculate ( 24.00 , ' DE ' ); // 28.56
$ taxRate = VatCalculator:: getTaxRate (); // 0.19
$ netPrice = VatCalculator:: getNetPrice (); // 24.00
$ taxValue = VatCalculator:: getTaxValue (); // 4.56
Um ein Array mit allen verfügbaren Steuersätzen für ein bestimmtes Land zu erhalten, verwenden Sie die Methode getTaxRatesForCountry
.
VatCalculator:: getTaxRatesForCountry ( ' DE ' ); // [ "high" = > 0.19 , "low" = > 0.07 ]
Bevor Sie die Umsatzsteuer-Identifikationsnummern Ihrer Kunden validieren, können Sie mit der Methode shouldCollectVAT
prüfen, ob der Ländercode die Erhebung der Umsatzsteuer überhaupt erfordert.
if (VatCalculator:: shouldCollectVAT ( ' DE ' )) {
// This country code requires VAT collection ...
}
Um die Umsatzsteuer-Identifikationsnummern Ihrer Kunden zu validieren, können Sie die Methode isValidVATNumber
verwenden. Die Umsatzsteuer-Identifikationsnummer sollte in einem vom MIAS vorgegebenen Format vorliegen. Die angegebenen Umsatzsteuer-Identifikationsnummern werden gekürzt und nicht relevante Zeichen/Leerzeichen werden automatisch entfernt.
Dieser Dienst basiert auf einer von der EU bereitgestellten SOAP-API eines Drittanbieters. Wenn diese API aus irgendeinem Grund nicht verfügbar ist, wird eine VATCheckUnavailableException
ausgelöst.
try {
$ validVAT = VatCalculator:: isValidVATNumber ( ' NL 123456789 B01 ' );
} catch ( VATCheckUnavailableException $ e ) {
// The VAT check API is unavailable ...
}
Alternativ ist es auch möglich, nur das von MIAS angegebene Format der Umsatzsteuer-Identifikationsnummer zu validieren. Dies ist nützlich, wenn Sie nicht auf eine Antwort von der SOAP-API warten möchten.
// 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 ' );
Um die Details einer Umsatzsteuer-Identifikationsnummer abzurufen, können Sie die Methode getVATDetails
verwenden. Die Umsatzsteuer-Identifikationsnummer sollte in einem vom MIAS vorgegebenen Format vorliegen. Die angegebenen Umsatzsteuer-Identifikationsnummern werden gekürzt und nicht relevante Zeichen/Leerzeichen werden automatisch entfernt.
Dieser Dienst basiert auf einer von der EU bereitgestellten SOAP-API eines Drittanbieters. Wenn diese API aus irgendeinem Grund nicht verfügbar ist, wird eine VATCheckUnavailableException
ausgelöst.
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 ...
}
Britische Umsatzsteuer-Identifikationsnummern sind etwas anders formatiert:
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 ...
}
Standardmäßig sind im VatCalculator alle EU-Mehrwertsteuervorschriften vordefiniert, sodass er problemlos aktualisiert werden kann, wenn sich diese für ein bestimmtes Land ändern.
Wenn Sie andere Mehrwertsteuersätze definieren müssen, können Sie dies tun, indem Sie die Konfiguration veröffentlichen und weitere Regeln hinzufügen.
Warnung
Stellen Sie sicher, dass Sie in der Konfigurationsdatei den Ländercode Ihres Geschäfts festlegen, um beim Verkauf an Geschäftskunden in Ihrem eigenen Land eine korrekte Mehrwertsteuerberechnung zu erhalten.
Um die Konfigurationsdateien zu veröffentlichen, führen Sie den Befehl vendor:publish
aus
php artisan vendor:publish --provider= " MpociotVatCalculatorVatCalculatorServiceProvider "
Dadurch wird eine vat_calculator.php
in Ihrem Konfigurationsverzeichnis erstellt.
Wenn aus irgendeinem Grund SOAP-Fehler auftreten, wenn die VIES-API fehlerhaft ist, werden diese Fehler ordnungsgemäß behandelt und false
zurückgegeben. Wenn Sie jedoch explizit über SOAP-Fehler informiert werden möchten, können Sie VatCalculator anweisen, diese als VATCheckUnavailableException
auszulösen. Die VATCheckUnavailableException
enthält dann die spezifische Meldung des SOAP-Fehlers.
Setzen Sie die Option in Ihrer Konfigurationsdatei auf true
:
<?php
return [
' forward_soap_faults ' => true ,
];
Sie können auch ein Timeout für den SOAP-Client festlegen. Standardmäßig bricht SOAP die Anfrage an VIES nach 30 Sekunden ab. Wenn Sie nicht so lange warten möchten, können Sie den Timeout beispielsweise auf 10 Sekunden reduzieren:
<?php
return [
' soap_timeout ' => 10 ,
];
VatCalculator wird außerdem mit einer ValidVatNumber
Validierungsregel für Umsatzsteuer-Identifikationsnummern ausgeliefert. Sie können dies verwenden, wenn Sie Eingaben aus einer Formularanforderung oder einer eigenständigen Validierungsinstanz validieren:
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 ...
}
Warnung
Die Validator-Erweiterung gibt false
zurück, wenn die SOAP-API zur Überprüfung der Umsatzsteuer-ID nicht verfügbar ist.
Notiz
Derzeit ist dieses Paket nicht mit Cashier Stripe v13 oder höher kompatibel, da es immer noch auf der alten taxPercentage
-Methode basiert, die aus Cashier v13 entfernt wurde. Sie können es in der Zwischenzeit weiterhin auf älteren Cashier Stripe-Versionen verwenden.
Wenn Sie dieses Paket in Kombination mit Laravel Cashier Stripe verwenden möchten, können Sie Ihrem abrechenbaren Modell die Verwendung des Merkmals BillableWithinTheEU
ermöglichen. Da dieses Merkmal die taxPercentage
-Methode des Billable
-Merkmals überschreibt, müssen wir unser Modell explizit dazu auffordern.
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 ' ];
}
Durch die Verwendung des Merkmals BillableWithinTheEU
verfügt Ihr abrechenbares Modell über neue Methoden zum Festlegen des Steuersatzes für das abrechenbare Modell.
Stellen Sie alles in einem Befehl ein:
setTaxForCountry($countryCode, $company = false)
Oder verwenden Sie den besser lesbaren, verkettbaren Ansatz:
useTaxFrom($countryCode)
– Den Steuersatz des angegebenen Landes verwendenasIndividual()
– Das abrechenbare Modell ist kein Unternehmen (Standard)asBusiness()
– Das abrechenbare Modell ist ein gültiges UnternehmenUm den korrekten Steuersatz festzulegen, bevor Sie Ihren Kunden abonnieren, sollten Sie den folgenden Arbeitsablauf in Betracht ziehen:
$ 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 );
Sehen Sie sich das CHANGELOG in diesem Repository an, um alle aktuellen Änderungen zu erfahren.
VatCalculator wird von Dries Vints verwaltet. Ursprünglich erstellt von Marcel Pociot.
VatCalculator ist eine Open-Source-Software, die unter der MIT-Lizenz lizenziert ist.