ADOBE COMMERCE

Mehrwertsteuerverwaltung in Adobe Commerce

Oleg Blinnikov

vat_management_in_adobe_commerce VAT Management in Adobe Commerce

In den letzten Jahren habe ich viel mit verschiedenen B2B-Projekten gearbeitet, und jedes von ihnen hatte unterschiedliche Anforderungen an die Steuerprozesse. Einer der wichtigsten Teile war immer die Verwaltung der Mehrwertsteuer. Und nachdem ich immer wieder dieselben Fragen beantwortet habe, habe ich eine kleine Übersicht erstellt, wie Adobe Commerce / Magento die Mehrwertsteuer verwaltet.

Was ist eine VAT-ID?

Eine Umsatzsteuer-Identifikationsnummer (USt-IdNr.) ist eine Kennung, die in vielen Ländern, auch in den Ländern der Europäischen Union, für die Zwecke der Mehrwertsteuer verwendet wird.

In der EU kann eine Umsatzsteuer-Identifikationsnummer online auf der offiziellen MIAS-Website der EU überprüft werden. Dort wird bestätigt, dass die Nummer derzeit vergeben ist, und es können der Name oder andere Angaben zur Identifizierung des Unternehmens angegeben werden, dem die Nummer zugewiesen wurde. Viele nationale Regierungen geben jedoch aus datenschutzrechtlichen Gründen keine Umsatzsteuer-Identifikationsnummern heraus.

(https://en.wikipedia.org/wiki/VAT_identification_number)

Warum ist es wichtig, die Steuernummer von Kunden zu überprüfen, bevor eine Transaktion durchgeführt wird?

Wenn Sie Produkte oder Dienstleistungen verkaufen, müssen Sie eine Rechnung ausstellen und diese an Ihren Kunden senden. Darin müssen Sie angeben, ob Ihr Kunde ein Geschäftskunde oder ein Endverbraucher (Konsument) ist. Der Grund dafür ist, dass Transaktionen mit Geschäftskunden (B2B) in der Regel steuerlich anders behandelt werden als Transaktionen mit Verbrauchern (B2C). Bei einigen Transaktionen, z. B. bei grenzüberschreitenden Dienstleistungen an Geschäftskunden, fallen häufig überhaupt keine indirekten Steuern an.

Um festzustellen, ob Sie Ihren Kunden in grenzüberschreitenden Situationen indirekte Steuern (wie die Mehrwertsteuer) in Rechnung stellen müssen, müssen Sie prüfen, ob Sie es mit einer Geschäftseinheit oder einer Privatperson zu tun haben. Zu diesem Zweck müssen Sie die Steueridentifikationsnummer Ihres Kunden überprüfen ("validieren"). (https://www.fonoa.com/blog/why-is-it-essential-to-validate-the-tax-number-of-your-customers-before-a-transaction-takes-place)

Wenn Sie dies falsch machen, erheben Sie entweder Steuern, wenn Sie es nicht sollten, und fügen Ihrem Produkt unnötige Kosten hinzu, oder Sie erheben keine Steuern, wenn Sie es sollten, was bedeutet, dass Sie nicht die Steuern erheben, die Sie erheben sollten, aber trotzdem an die Steuerbehörden abführen müssen. Beides sind offensichtliche Situationen, die jedes Unternehmen vermeiden möchte.

Deshalb ist es wichtig, zu überprüfen, ob Ihre Kunden Geschäftskunden oder Verbraucher sind. Eine einfache Möglichkeit, den Steuerstatus Ihres Kunden zu überprüfen, besteht darin, zu überprüfen, ob Ihr Kunde im VIES für Mehrwertsteuerzwecke registriert ist.

Was ist VIES?

VIES (VAT Information Exchange System) ist ein Online-System, das zu diesem Zweck von der Europäischen Kommission entwickelt wurde. Über das MIAS können Unternehmen schnell und einfach einzelne Mehrwertsteuernummern in der gesamten EU online überprüfen.

(https://www.fonoa.com/blog/what-is-vies)

VAT ID Validierung in Magento

Standardmäßig verwendet Adobe Commerce den EU VIES service um die VAT-ID zu validieren.

Wie bei jedem Dienst eines Drittanbieters kann es vorkommen, dass die API-Antwortzeit langsam ist oder der Dienst nicht verfügbar ist. Dies hat jedoch keinen Einfluss auf die allgemeine Benutzererfahrung. In diesem Fall wird die Validierung als fehlgeschlagen markiert und der Administrator kann sie später wiederholen.

Die VAT-ID-Validierung weist den Kunden automatisch eine der vier Standard-Kundengruppen zu, je nach den Ergebnissen der VAT-ID-Validierung:

Sie können neue Kundengruppen für die Umsatzsteuer-Identifikationsprüfung erstellen oder bestehende Gruppen verwenden, wenn diese Ihrer Geschäftslogik entsprechen. Bei der Konfiguration der Umsatzsteuer-ID-Prüfung müssen Sie jede der erstellten Kundengruppen als Standard für Kunden mit entsprechenden Umsatzsteuer-ID-Prüfergebnissen zuweisen. (https://docs.magento.com/user-guide/v2.3/tax/vat-validation-configure.html)

Wenn die MwSt.-Validierung aktiviert ist, kann sich dies auf die Bestellzeit für verschiedene Länder auswirken, da die Antwortzeit des MIAS von Land zu Land unterschiedlich ist.

Es gibt 2 Felder für die Umsatzsteuer-ID in Magento. Das erste Feld bezieht sich auf die Kundenentität, die nicht mit dem Mehrwertsteuervalidierungsdienst "MIAS" geprüft wird. Es hat nur einen gewissen Informationscharakter, hat aber keinen Einfluss auf die Zuordnung zur Kundengruppe.

adobe_commerce_vat_settings Adobe Commerce VAT Settings

Das zweite Feld für die Umsatzsteuer-Identifikationsnummer bezieht sich auf die Adresseinheit des Kunden, die mit dem MIAS-Dienst abgeglichen wird. Wenn die Umsatzsteuer-ID gültig ist, wird der Kunde der definierten Kundengruppe zugeordnet. (e.g. "Valid VAT ID").

adobe_commerce_vat_number Adobe Commerce VAT Number

VAT ID Format

Die vollständige Kennung beginnt mit einem ISO-3166-1-Alpha-2-Ländercode (2 Buchstaben) (mit Ausnahme Griechenlands, das den ISO-639-1-Sprachencode EL für die griechische Sprache anstelle seines ISO-3166-1-Alpha-2-Ländercodes GR verwendet, und Nordirland, das im Handel mit der EU den Code XI verwendet) und besteht dann aus 2 bis 13 Zeichen. In den meisten Ländern bestehen die Kennungen aus numerischen Ziffern, in einigen Ländern können sie auch Buchstaben enthalten.

Ausländische Unternehmen, die mit Privatpersonen und Nichtunternehmern in der EU Handel treiben, können anstelle eines Ländercodes eine mit "EU" beginnende USt-IdNr. haben, z. B. Godaddy EU826010755 und Amazon (AWS) EU826009064.

Wenn der Benutzer eine Umsatzsteuer-Identifikationsnummer mit Bindestrichen eingibt, bricht Magento die Bindestriche ab, bevor es die Umsatzsteuer-Identifikationsnummer des Kunden an den Validierungsdienst sendet. Magento bricht auch den Ländercode aus der Mehrwertsteuernummer heraus, wenn das Land in der EU liegt. Wenn der Kunde zum Beispiel eine der folgenden Mehrwertsteuernummern eingibt:

Nach der Bereinigung wandelt Magento alle Daten vor dem Versand in das folgende Format um: 01234567. Und alle werden insgesamt gültig sein.

vendor/magento/module-customer/Model/Vat.php:190
$vatNumberSanitized = $this->isCountryInEU($countryCode)
                 ? str_replace([' ', '-', $countryCodeForVatNumber], ['', '', ''], $vatNumber)
                 : str_replace([' ', '-'], ['', ''], $vatNumber);

Adobe Commerce (Magento) Code

Die folgende Methode ist der Haupterweiterungspunkt der Validierung der Umsatzsteuer-ID:

vendor/magento/module-customer/Model/Vat.php:162
   /**
      * Send request to VAT validation service and return validation result
      *
      * @param string $countryCode
      * @param string $vatNumber
      * @param string $requesterCountryCode
      * @param string $requesterVatNumber
      *
      * @return DataObject
      */
     public function checkVatNumber($countryCode, $vatNumber, $requesterCountryCode = '', $requesterVatNumber = '')

Die URL für die Mehrwertsteuer-Validierung für EU-Mehrwertsteuernummern wird als Konstante gespeichert:

vendor/magento/module-customer/Model/Vat.php:47
/**
  * WSDL of VAT validation service
  *
  */
 const VAT_VALIDATION_WSDL_URL = 'https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';

Theoretisch kann dies dazu führen, dass die URL irgendwann in der Zukunft geändert wird und der Dienst nicht mehr aktiv ist. Außerdem ist dies der erste Einstiegspunkt, an dem Sie als Entwickler prüfen müssen, ob der Dienst verfügbar ist.

Die wichtigsten Fälle, in denen eine Überprüfung der Umsatzsteuer-ID durchgeführt wird:

vendor/magento/module-customer/Observer/AfterAddressSaveObserver.php:152
   /**
      * Address after save event handler
      *
      * @param Observer $observer
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     public function execute(Observer $observer)
     {
         ...
         $result = $this->_customerVat->checkVatNumber(
             $customerAddress->getCountryId(),
             $customerAddress->getVatId()
         );
         ...
     }
vendor/magento/module-quote/Observer/Frontend/Quote/Address/VatValidator.php:43
   /**
      * Validate VAT number
      *
      * @param \Magento\Quote\Model\Quote\Address $quoteAddress
      * @param \Magento\Store\Model\Store|int $store
      * @return \Magento\Framework\DataObject
      */
     public function validate(\Magento\Quote\Model\Quote\Address $quoteAddress, $store)

GraphQL

mutation {
   setBillingAddressOnCart(
     input: {
       cart_id: "{{cart_id}}"
       billing_address: {
         customer_address_id: {{address_id}}
         same_as_shipping: true
       }
     }
   ) {
     cart {
       billing_address {
         firstname
         lastname
         company
         street
         city
         region{
           code
           label
         }
         postcode
         telephone
         country {
           code
           label
         }
       }
     }
   }
 }

REST

/V1/guest-carts/:cartId/payment-information
   /**
     * Set payment information and place order for a specified cart.
     *
     * @param string $cartId
     * @param string $email
     * @param \Magento\Quote\Api\Data\PaymentInterface $paymentMethod
     * @param \Magento\Quote\Api\Data\AddressInterface|null $billingAddress
     * @throws \Magento\Framework\Exception\CouldNotSaveException
     * @return int Order ID.
     */
    public function savePaymentInformationAndPlaceOrder(
        $cartId,
        $email,
        \Magento\Quote\Api\Data\PaymentInterface $paymentMethod,
        \Magento\Quote\Api\Data\AddressInterface $billingAddress = null
    );

Fazit

Ich hoffe, dass ich jemandem geholfen habe, zu verstehen, wie der VAT-Validierungsprozess funktioniert. Wenn Sie Unterstützung bei der Magento-Konfiguration benötigen, dann folgen Sie bitte dieser Dokumentation: VAT ID Validation | Adobe Commerce 2.4 User Guide

Photo by Jon Tyson on Unsplash