Eine Umsatzsteuernummer ist die Kennung, die ein Unternehmen für die Umsatzsteuer verwendet, und sie gehört zu den wenigen Feldern, die auf nahezu jedem grenzüberschreitenden Geschäftsdokument stehen. Sie ist zugleich das Feld, an dem Teams am häufigsten zwei völlig verschiedene Fragen verwechseln: Sieht das aus wie eine gültige Nummer, und ist dieses Unternehmen tatsächlich für die Umsatzsteuer registriert. Wer beides vermischt, baut Formulare, die echte Kunden abweisen, und Systeme, die erfundene annehmen.
Dieser Artikel behandelt, was die Nummer ist, warum sich ihre Struktur an jeder Grenze ändert, wie die öffentlichen Abfragedienste hineinpassen und wie man das Feld so entwirft, dass Formatprüfung und Registrierungsprüfung in ihren eigenen Spuren bleiben.
Was ist eine Umsatzsteuernummer?
Sie ist eine steuerliche Registrierungskennung. Ein Unternehmen, das umsatzsteuerpflichtig ist, registriert sich bei der Steuerverwaltung des betreffenden Landes und erhält eine Nummer; diese Nummer wird anschließend auf Rechnungen, in Erklärungen und in der grenzüberschreitenden Meldung zitiert, die Systeme nach EU-Vorbild verlangen.
Aus dieser Definition folgen zwei Eigenschaften. Erstens gehört die Nummer einer Steuerverwaltung und nicht einem Handelsregister, sie wird also nach Steuerrecht vergeben und kann für eine Einheit bestehen, die ganz woanders eingetragen ist. Zweitens ist die Nummer konstruktionsbedingt landesspezifisch: Sie wird von einer Behörde nach den Regeln einer Jurisdiktion ausgegeben und bedeutet für sich allein außerhalb dieser Jurisdiktion nichts.
Sie ist außerdem keine Handelsregisternummer, keine Steuerkennung im weiten Sinn und keine Lizenz. Ein Unternehmen kann mehrere dieser Kennungen gleichzeitig führen, und ein Unternehmen, das ausschließlich im Inland handelt, braucht möglicherweise nie eine Umsatzsteuernummer.
Wann braucht ein Unternehmen sie tatsächlich?
Häufiger, als man nach dem Ruf dieses Feldes vermuten würde, und in einer Handvoll wiederkehrender Situationen.
- Beim Verkauf von Waren oder Leistungen über eine Grenze hinweg, wenn der Käufer ein Unternehmen ist und die steuerliche Behandlung von dessen Status abhängt.
- Beim Rechnungsstellen an einen Geschäftskunden, der die Nummer auf dem Dokument benötigt, um die Steuer geltend zu machen oder abzurechnen.
- Bei der Meldung innergemeinschaftlicher Lieferungen, bei der die Nummer der Gegenseite Teil der Erklärung ist.
- Bei der Registrierung in einem Land, in dem das Unternehmen die dortige Schwelle für die steuerliche Erfassung überschritten hat.
- Bei Import und Export, wo die Steuerverwaltung die Sendung einem registrierten Händler zuordnen muss.
Das Muster ist, dass die Nummer genau dann am wichtigsten wird, wenn zwei Steuersysteme aufeinandertreffen. Deshalb ist das Feld auch so fehleranfällig: Es wird von einem Menschen gefüllt, der ein Dokument nach unbekannten Regeln liest, und von Software geprüft, die nach einem einzigen vertrauten Regelwerk geschrieben wurde.
Was unterscheidet sich von Land zu Land?
Nahezu alles, worauf ein Parser bauen möchte. Die Struktur legt die ausgebende Steuerverwaltung fest, sodass die einzige sichere Verallgemeinerung schwach ausfällt: Viele Formate beginnen mit einem zweibuchstabigen Ländercode und führen danach Ziffern, Buchstaben oder eine Mischung fort.
Über diese Ausgangsbeobachtung hinaus sind die Unterschiede genau die, die strenge Regeln brechen.
| Eigenschaft | Warum eine feste Regel scheitert |
|---|---|
| Vorhandensein eines Länderpräfixes | Dieselbe Behörde druckt es in einem Kontext und lässt es in einem anderen weg |
| Gesamtlänge | Die Formate reichen von kurz bis deutlich lang, keine einzelne Grenze deckt alle ab |
| Buchstaben oder Ziffern | Manche Formate sind numerisch, andere alphanumerisch, wieder andere enthalten beides |
| Interne Trennzeichen | Leerzeichen und Satzzeichen sind Darstellung, nicht Teil der Kennung |
| Prüfziffern | Manche Formate enthalten eine, andere sind schlichte Zuteilungen ohne Arithmetik |
Beachten Sie, dass das Präfix eine Bequemlichkeit ist und keine Garantie. Wenn es vorhanden ist, sagt es Ihnen, welche Behörde die Nummer ausgegeben hat – was für die Weiterleitung einer Abfrage wirklich nützlich ist –, aber wer es als Pflicht behandelt, weist einwandfreie Eingaben ab, die aus einem Dokument ohne Präfix abgetippt wurden.
Ist ein gültiges Format dasselbe wie ein registriertes Unternehmen?
Nein, und die Lücke dazwischen ist das mit Abstand Nützlichste, was man über dieses Feld verstehen kann.
Eine Nummer kann syntaktisch einwandfrei sein und niemandem gehören. Wer das Muster versteht, kann eine schreiben, die keine Behörde je ausgegeben hat, und ein System, das nur das Muster prüft, nimmt sie an. Umgekehrt kann eine Nummer registriert sein und trotzdem an einer selbstgebauten Regel scheitern, weil die Regel gegen ein anderes Land oder ein älteres Drucklayout geschrieben wurde.
Deshalb ist der öffentliche Prüfdienst der Europäischen Kommission für Umsatzsteuernummern als Beispiel so wichtig: Er existiert, damit ein Unternehmen bestätigen kann, ob eine Nummer in einem Mitgliedstaat tatsächlich für die Umsatzsteuer registriert ist – eine Frage, die kein Muster beantworten kann. Diese Unterscheidung verallgemeinert sich weit über diesen Dienst hinaus: Wo eine Steuerverwaltung eine amtliche Auskunftsmöglichkeit veröffentlicht, ist diese Stelle maßgeblich, und ein regulärer Ausdruck ist es nicht.
Daraus folgt etwas Nützliches für den Entwurf von Oberflächen. Wenn eine Prüfung scheitert, sollte die Meldung sagen, welche Prüfung gescheitert ist. Der Hinweis, dass etwas nicht wie eine Umsatzsteuernummer aussieht, und der Hinweis, dass die Nummer mit der Steuerverwaltung nicht bestätigt werden konnte, führen den Nutzer zu unterschiedlichen Handlungen, und sie zu vermischen kostet alle Zeit.
Warum sollten Teams eigene Regeln vermeiden?
Weil die Regeln national, gelegentlich überarbeitet und zahlreich sind, und weil ein selbstgebauter Prüfer ein Wartungsrisiko darstellt, das in die am wenigsten sichtbare Richtung scheitert.
Betrachten Sie, was eine selbstgeschriebene Regel tatsächlich tut. Sie kodiert das Layout eines Landes. Sie wird gegen eine Handvoll Beispiele aus einem oder zwei Ländern getestet. Sie meldet einen einzigen allgemeinen Fehler. Und wenn eine Steuerverwaltung ein Layout ändert, kündigt das niemand an – die Regel beginnt einfach, echte Kunden abzulehnen, allmählich und in den Ländern, mit denen niemand im Team handelt. Der Fehler ist still, und die Kosten trägt der Vertrieb.
Die Alternative ist nicht der Verzicht auf Prüfung. Sie ist eine geschichtete Prüfung, in der jede Schicht eine Frage beantwortet, die sie tatsächlich beantworten kann, und die maßgebliche Schicht ein Aufruf des amtlichen Dienstes ist statt einer Vermutung. Diese Architektur verhält sich außerdem robust: Wenn der amtliche Dienst langsam, unerreichbar ist oder ein uneindeutiges Ergebnis liefert, kann das Formular die Eingabe trotzdem annehmen und die Bestätigung als ausstehend markieren, statt einen legitimen Kunden zu blockieren.
Für Entwickler: Formatprüfung und Registerprüfung sind verschiedene Funktionen
Trennen Sie die Zuständigkeit in zwei Funktionen mit zwei verschiedenen Rückgabetypen, und lassen Sie sie keine Fehlermeldung teilen.
Die erste ist eine lokale Gestaltprüfung. Sie sollte bewusst nachsichtig sein: Trennzeichen entfernen, Groß- und Kleinschreibung vereinheitlichen, leere Werte und Zeichen ablehnen, die in keinem Format vorkommen können, und eine Höchstlänge anwenden, die bequem über dem längsten echten Format liegt. Wenn Sie ein länderspezifisches Muster besitzen und von seiner Herkunft überzeugt sind, wenden Sie es als Hinweis an, der eine Warnung herabstufen kann, niemals als harte Ablehnung eines Werts, den Sie nicht überprüfen können. Trägt ein Format tatsächlich eine Prüfziffer, implementieren Sie sie nur für die Länder, in denen Sie den Algorithmus verifiziert haben, und behandeln Sie ein Scheitern als möglichen Tippfehler und nicht als fehlende Registrierung.
Die zweite ist eine Registrierungsabfrage gegen die amtliche Einrichtung. Geben Sie ihr einen eigenen Zeitablauf, eine eigene Wiederholungsstrategie und ein eigenes Vokabular von Ergebnissen: bestätigt, nicht gefunden, nicht verfügbar und für dieses Land nicht anwendbar. Speichern Sie ein positives Ergebnis für einen sinnvollen Zeitraum und ein negatives deutlich kürzer, weil ein Unternehmen, das sich heute registriert, nicht eine Woche lang wegen einer veralteten Antwort abgelehnt werden sollte. Protokollieren Sie, welche Nummern wann geprüft wurden, und behandeln Sie dieses Protokoll als Geschäftsdaten, die entsprechend zu schützen sind.
Zwei weitere Gewohnheiten lohnen sich. Behalten Sie den Rohwert, den der Nutzer eingegeben hat, neben dem normalisierten, damit eine Anzeige oder ein Dokument exakt wiedergeben kann, was die Quelle zeigte. Und halten Sie erzeugte Werte unmissverständlich synthetisch: Der Unternehmensdaten-Generator füllt das Umsatzsteuernummernfeld mit formatierten Werten, die keiner Steuerverwaltung gehören, und jeder Export trägt einen entsprechenden Hinweis. Der verwandte Artikel zur Steuerkennung führt dieselbe Schichtung für die breitere Familie der Steuernummern durch. Wie man all das gegen das Formular eines echten Produkts prüft, steht im Artikel zu den Testfällen für das Rechnungsformular.
Nächste Schritte
Listen Sie jede Stelle in Ihrem Produkt auf, an der heute eine Umsatzsteuernummer geprüft wird, und kennzeichnen Sie jede Prüfung entweder als Gestalt- oder als Registrierungsprüfung. Jede Prüfung, die den Anspruch erhebt, es gehe um Existenz, aber als Muster umgesetzt ist, ist ein Fehler, der auf einen internationalen Kunden wartet. Führen Sie dann Ihr Rechnungsformular durch die vier Zweige – Nummer vorhanden, Nummer fehlt, grenzüberschreitend und Privatperson – und verwenden Sie dazu erzeugte Daten aus dem Unternehmensdaten-Generator, damit nichts, womit Sie testen, für ein echtes Unternehmen gehalten werden kann.