Mehrwertsteuerverwaltung in Adobe Commerce


Author Photo
Oleg Blinnikov
Senior Developer at comwrap

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:

  • Inländisch
  • Intra-EU
  • Ungültige USt.-ID
  • Fehler bei der 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

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

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:

  • 0123456-7
  • 01234567
  • DE0123456-7
  • DE01234567

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);

  • Die Mehrwertsteuer wird in der Datenbank in dem Format gespeichert, in dem der Benutzer sie eingegeben hat.
  • Wenn das Land des Kunden, das an der Kasse eingegeben wurde, und der 2-Buchstaben-Ländercode vor der MwSt.-ID nicht gleich sind, ist das Ergebnis der Validierung ungültig

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:

  • Customer Address save action

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()
        );
        ...
    }

  • Checkout. Set customer’s billing address

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)

  • API requests to Magento that are setting billing address to customer’s quote:

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

Weitere Artikel zum Thema

  • 2021-10-15
    Hands-on Adobe Firefly
    Author Photo
    Alex Lyzun
    Lead Developer Adobe Commerce
    Das Projekt Firefly wurde von Adobe Mitte 2020 vorgestellt. Nachdem ich einige Tage mit Firefly experimentiert habe, wurde mir klar, dass es wirklich einen eigenen Artikel verdient hat, und so sind wir hier.
  • 2021-10-15
    Queue Systems integration review
    Author Photo
    Alex Lyzun
    Lead Developer Adobe Commerce
    Bestehende Message Queue Lösungen für Adobe Commerce unter die Lupe genommen
  • 2021-10-15
    Integrate 3rd party CMS with Adobe Commerce Cloud
    Author Photo
    Alex Lyzun
    Lead Developer Adobe Commerce
    The requirements of any e-commerce system integration are always unique and sometimes even quite exotic. In this Article, I will share our experience and show how you can integrate any CMS (e.g. Wordpress) with Adobe Commerce under a single domain name.
  • 2021-10-15
    Design a Digital Experience for B2X
    Author Photo
    Alexander Beutel
    Adobe Commerce Practise Lead
    How manufacturers can create a seamless digital experience—for business buyers, distributors, and maybe even consumers—that accelerates growth.
  • 2021-10-15
    The E-Commerce Experience Wish List
    Author Photo
    Alexander Beutel
    Adobe Commerce Practise Lead
    Learn what consumers want most in a digital customer experience—and how you can deliver it to them.