maesn
Use Case

Kunden- und Lieferantendaten abgleichen, ohne zu raten, welche Datensätze passen

Beide Seiten führen die Firma bereits. Ihr Produkt kennt sie als einen Datensatz, das Buchhaltungssystem als einen anderen, und nichts in beiden sagt, dass es dieselbe ist. Maesn liefert, was jede Seite hält, in einer Form, damit Ihre Regeln entscheiden können.

In Ihrem Produkt
Müller GmbH
info@mueller.de
In ihrem Hauptbuch
Mueller G.m.b.H.
buchhaltung@mueller.de
Dieselbe Firma?
Der Leitfaden ordnet zu über
  • vatIdKennung
  • emailnicht eindeutig
  • companyNamenicht eindeutig

Nur das erste ist eine Kennung, und sie ist selten dokumentiert. Auf den übrigen ordnen Sie Firmen über Namen und E-Mail zu.

Diese Software-Teams vertrauen uns
HubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicapHubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicap
Das Problem

Zwei Datensätze, eine Firma, und kein Schlüssel, der es belegt

Kontaktdaten zwischen zwei Systemen zu bewegen ist ein gelöstes Problem. Zu wissen, welcher Kontakt welcher ist, nicht, und der dokumentierte Ablauf verbringt seinen mittleren Schritt mit genau dieser Frage.

Dokumentiert auf den Systemen, die einen Kundendatensatz herausgeben
vatIdKennungEine eingetragene Kennung. Zwei Firmen können sich keine teilen.
emailOft ein gemeinsames Postfach, und eine Firma kann mehrere haben.
companyNameEine von Hand getippte Zeichenkette. Zwei Schreibweisen sind zwei Werte.
Der Leitfaden nennt alle drei in einem Atemzug, und nur eines davon ist ein Schlüssel. Auf den meisten Systemen steht die Kennung nicht in der dokumentierten Feldliste, und damit bleiben ein Name und eine E-Mail-Adresse, um zu entscheiden, ob zwei Datensätze eine Firma sind. Das ist ein Zuordnungsproblem mit einer Toleranz und kein Nachschlagen, und wo die Toleranz sitzt, ist eine Entscheidung über Ihre Daten und nicht über die Anbindung.

Jeder andere Use Case dieser Familie beginnt mit einem Beleg. Dieser beginnt mit einer Identitätsfrage, und sie ist der Grund, warum der Kontaktabgleich meist die erste Anbindung ist, die ein Team baut, und die, zu der es am längsten zurückkehrt. Eine Rechnung verweist auf einen Kunden. Eine Ausgabe verweist auf einen Lieferanten. Sind sich die beiden Seiten uneinig, welche Firma das ist, ist alles Nachgelagerte falsch, und zwar auf leise statt auf laute Weise.

Der dokumentierte Ablauf nennt drei Felder zum Abgleich, und sie sind nicht gleichwertig. Eine Umsatzsteuer-Identifikationsnummer ist registriert, zwei Firmen können sich also keine teilen, und ein Abgleich darauf ist ein Nachschlagen. Eine E-Mail-Adresse ist oft ein gemeinsames Postfach, und eine Firma kann mehrere haben. Ein Firmenname ist eine Zeichenfolge, die jemand getippt hat, und eine ausgeschriebene Rechtsform und dieselbe abgekürzt sind für einen Menschen dieselbe Firma und für einen Vergleich zwei verschiedene Werte. Die Identifikationsnummer wäre die, die es entscheidet, und sie steht in der dokumentierten Feldliste kaum eines angebundenen Systems.

Auf fast jedem System ist das deshalb ein Abgleichproblem mit einer Toleranz und kein Nachschlagen über einen Schlüssel, und die Toleranz ist eine Produktentscheidung. Gleicht man zu locker ab, verschmelzen zwei Kunden zu einem. Gleicht man zu streng ab, bekommen Ihre Nutzer eine zweite Kopie einer Firma, die sie schon haben, in einem System, in dem die nächste Rechnung dann auf die falsche verweist. Keiner der beiden Fehler meldet sich.

Wie Maesn das löst

Eine Anbindung, beide Wege zu einem Kontakt

Kontaktdatensätze kommen nicht überall auf demselben Weg, und welchen Weg ein System braucht, lässt sich vorher wissen und nicht erst bei der ersten leeren Antwort.

GET /customers + /suppliers

Zwei Listen, getrennt gehalten, wie die meisten Buchhaltungssysteme sie halten.

GET /contacts

Eine Liste, auf den Systemen, die Kunden und Lieferanten zusammen halten.

Die Wege sind keine Vorliebe, und der zweite ist nicht die kleine Fassung des ersten. Wo das System sie selbst zusammenführt, ist der kombinierte Endpunkt der einzige Weg hinein, sodass ein Produkt sie auf bexio, Moneybird, odoo, Procountor, SnelStart verliert, wenn es den naheliegenden Weg umsetzt und dort aufhört, und zwar ohne einen Fehler, der auffiele. Über beide Wege hinweg liegt die Reichweite bei fünfundzwanzig der 30+ angebundenen Systeme.

Welchen Weg ein System auch nutzt, zurück kommt derselbe normalisierte Datensatz: ein Firmenname, eine Anschrift, ein Kontakttyp, eine E-Mail-Adresse, unter denselben Feldnamen auf jedem System, das Ihre Kunden betreiben. Das macht aus einer Abgleichregel etwas, das Sie einmal schreiben statt einmal je Hersteller, und es ist die Substanz hinter dem Wort eine Anbindung, denn der Kunde gibt das alles einmal frei.

Die beiden Seiten danach in Übereinstimmung zu halten ist die Hälfte, aus der sonst ein Projekt wird, und hier ist sie ein Abfrageparameter. Nur nach dem zu fragen, was sich geändert hat, seit Ihr letzter Lauf durch ist, hält einen nächtlichen Abgleich günstig, während die Kontaktlisten Ihrer Kunden wachsen, und wo ein System Events aussendet, sagt es Ihnen ein Webhook-Abonnement, statt dass Sie fragen. Die Dokumentation nennt die Systeme, die Events unterstützen, und es ist eine Minderheit, also ist der Lesezugriff der Mechanismus, der immer funktioniert, und das Event der, der ihn prompt macht.

Wo ein System etwas führt, wofür das gemeinsame Modell kein Feld hat, und bei Kontaktdaten kommt das oft vor, weil Kennungen sich je Land unterscheiden, ist am Modell vorbeizugreifen dokumentiert statt improvisiert. Was all das nicht tut, ist zu entscheiden, was als Treffer gilt. Eine Schicht, die zwei Datensätze nach eigenem Urteil zusammenführt, träfe über die Daten Ihrer Kunden eine Entscheidung, für die sie nicht zuständig ist.

Was Sie bekommen

Ein Hin und Zurück, so weit das System es zulässt

Das ist der eine Use Case dieser Familie, in dem Daten wirklich in beide Richtungen fließen, und die haltbare Fassung des Versprechens ist hier deshalb eine Messung und kein Adjektiv. Jede Stufe unten ist eine Teilmenge der darüber.

GETIhren Datensatz lesen20
POSTAnlegen, was ihnen fehlt16
PUT / PATCHKorrigieren, was sich geändert hat11
DELETEEinen Datensatz entfernen0
Wo aus einem beidseitigen Abgleich ein einseitiger Import wird

Auf diesen Systemen können Sie einen Kunden anlegen und nie einen aktualisieren: Abacus, Pennylane, Sage Active, Twinfield, Xentral. Der Datensatz landet einmal, und danach laufen die zwei Kopien auseinander, denn die Korrektur, die der Leitfaden beschreibt, hat keinen Ort. Das lohnt sich zu wissen, bevor Sie einem Kunden zusagen, dass seine Daten im Gleichstand bleiben, und an der Zahl der Anlagen allein ist es nicht zu sehen.

Einen Kundendatensatz zu lesen ist der am besten abgedeckte Vorgang im ganzen Modell, und deshalb ist dieser Use Case ein vernünftiger Anfang für eine Anbindung und kein schwerer Abschluss. Schreiben engt es ein, Korrigieren engt es weiter ein, und Löschen ist auf keinem Objekt verfügbar. Das letzte liest sich schlimmer, als es ist: Buchhaltungssysteme erwarten, dass ein Kunde mit Historie deaktiviert und nicht entfernt wird, und dass Korrekturen als neue Belege ankommen. Es heißt allerdings, dass ein Duplikat, das Sie anlegen, sich hinterher nicht still löschen lässt, und das legt das Gewicht zurück auf den Abgleichschritt.

Was Sie von der Anbindung bekommen, ist also ein vollständiges Bild dessen, was die andere Seite führt, und die Möglichkeit, darauf zu handeln, so weit dieses System es zulässt, ohne ein Projekt je Hersteller hinter jedem Verb. Was Sie nicht bekommen, ist eine Entscheidung. Der Leitfaden beschreibt das Auflösen widersprüchlicher Angaben als Ihre Arbeit, und die Zahlen darüber sind der Grund, warum diese Rahmung stimmt: auf einem System, das nicht aktualisieren kann, muss die Auflösung vor dem Schreiben stattfinden und nicht danach. Sind die Kontakte einig, verweisen eine Rechnung zu erstellen und eine Ausgabe zu buchen beide auf eine Firma, die auf beiden Seiten dasselbe bedeutet, und genau deshalb beginnen ihre Leitfäden hier.

Beleg

Ein Unternehmen, dieselbe Firma in beiden Systemen

HubSpot hält Kundendaten im Gleichstand mit den Buchhaltungssystemen der DACH-Region.

“Wir binden deutsche Buchhaltungssysteme an und verlassen uns dabei auf Maesn als vertrauenswürdigen Partner: reibungsloser Datenfluss, volle Compliance, stärkere Partnerschaften und effiziente, verlässliche Finanzprozesse, die unser Wachstum tragen.”
Aron Gosselin
Partnerships Manager, HubSpot

HubSpot ist dieser Use Case in der Größenordnung, in der die Frage der Zuordnung aufhört, theoretisch zu sein: Kundendaten, Rechnungen und Zahlungserinnerungen, die zwischen einem CRM und den Buchhaltungssystemen hin- und herlaufen, die ihre DACH-Kunden tatsächlich fahren, für Hunderte dieser Kunden. Die Systeme, die ihre Case Study nennt, sind sevdesk, Lexware Office und DATEV, und sie sind sich über fast alles uneinig, außer darüber, dass ein Kundendatensatz einen Namen und eine Anschrift hat. Diese Uneinigkeit nimmt ein gemeinsames Modell auf, und deshalb bleibt die interessante Arbeit bei den Regeln und nicht bei der Infrastruktur.

Die Eckdaten

Jeder Vorgang an einem Kontakt, je System gezählt

Kunden und Lieferanten über alle drei Vorgänge, dann der kombinierte Endpunkt, gelesen aus der Dokumentation des jeweiligen Systems.

Über die 30+ angebundenen Systeme
Was Sie brauchenHeuteAuf AnfrageSystem kann es nicht
Kunden, lesen2027
Kunden, schreiben1649
Kunden, aktualisieren11810
Lieferanten, lesen1928
Lieferanten, schreiben14411
Lieferanten, aktualisieren11711
Kombinierte Liste, lesen8417
Lesen Sie die ersten drei Zeilen nach unten, dann zeigt sich die Form eines Abgleichs: einen Kunden zu lesen ist die am besten abgedeckte Operation des ganzen Modells, einen zu schreiben ist gut abgedeckt, und einen zu korrigieren ist die Stelle, an der es ausdünnt. Lieferanten folgen beim Lesen und Schreiben derselben Kurve einen Schritt dahinter und liegen beim Aktualisieren mit den Kunden gleichauf. Die letzte Zeile ist der kombinierte Endpunkt, und seine Reichweite ist aus einem Grund schmal, der keine Lücke ist: die meisten Systeme halten Kunden und Lieferanten getrennt, und den Weg, der sie zusammenführt, gibt es deshalb nur dort, wo das System selbst es tut.

Die Tabelle beantwortet die Frage, die darüber entscheidet, wie viel Abgleich Sie zusagen können, und das ist nicht, ob der Kontaktabgleich funktioniert, sondern wie tief er auf den Systemen reicht, die Ihre eigenen Kunden fahren. Kunden liegen beim Lesen und beim Schreiben vor Lieferanten, und beim Aktualisieren liegen beide gleichauf, und das zählt, wenn Ihr Produkt um die Kreditorenseite herum gebaut ist: die erste Hälfte der Funktion ist dort etwas dünner, und eine Eingangsrechnung braucht ihren Lieferanten zuerst.

Die letzte Zeile ist die, die man falsch liest. Eine schmale Reichweite auf dem kombinierten Endpunkt ist keine Lücke in der Abdeckung, sie spiegelt, wie die Systeme selbst gebaut sind: die meisten führen Kunden und Lieferanten als getrennte Listen, und einen zusammengeführten Weg gibt es nur dort, wo das darunterliegende System sie ebenfalls zusammenführt. Die Wege gemeinsam statt getrennt zu zählen ist die einzige Zahl, die die Reichweite ehrlich beschreibt, und deshalb macht der Abschnitt darüber es so.

Wo die Grenze verläuft

Wir liefern die Datensätze, Sie entscheiden, was zusammengehört

In diesem Use Case ist die Grenze ungewöhnlich scharf, weil der dokumentierte Ablauf die Entscheidung in die Mitte stellt und sie als Ihre benennt.

Was Maesn liefert
  • Beide Wege zum Kontaktdatensatz
  • Eine Form auf jedem System
  • Schreiben und Korrigieren zurück
  • Nur das seither Geänderte
Was Ihr Produkt bleibt
  • Welche Datensätze eine Firma sind
  • Wie nah ein Treffer sein muss
  • Welche Seite einen Konflikt gewinnt
  • Wann der Abgleich läuft

Alles links ist die Anbindung: zwei dokumentierte Wege in eine Kontaktliste, dieselbe Satzform, auf welchem System der Kunde auch läuft, Schreibvorgänge und Korrekturen in die Gegenrichtung, soweit dieses System es zulässt, und ein günstiger Weg, nach dem Geänderten zu fragen. Das ist der Teil, der sonst eine Anbindung je Buchhaltungsplattform wäre, jede mit einer eigenen Vorstellung davon, was ein Kunde ist.

Alles rechts ist Ihr Produkt, und in diesem Use Case ist es die Substanz und nicht die Verzierung. Ob zwei Datensätze eine Firma sind, wie nah eine Übereinstimmung sein muss, bevor Sie darauf handeln, welche Seite gewinnt, wenn sich beide geändert haben, und wie oft das alles läuft, sind Entscheidungen, die von Ihren Daten und den Erwartungen Ihrer Nutzer abhängen. Die Dokumentation nennt das Auflösen widersprüchlicher Informationen und lässt es bei Ihnen, und dort gehört es hin.

Eines gehört hierher, weil die Seite, die diese ersetzt, es in eine Überschrift gestellt hat. Maesn sagt nicht zu, dass ein Datensatz nie zweimal geschrieben werden kann. Was ein Duplikat verhindert, ist der Abgleichsschritt, den Ihr Produkt vor dem Schreiben leistet, und der lastModified-Filter hält die Kopie, gegen die Sie abgleichen, aktuell genug, damit diese Entscheidung eine gute ist.

Eine Gegenpartei vor dem Schreiben zuzuordnen ist Infrastrukturarbeit, und zwar die Art, die Produkt- und Entwicklungsteams gehört und nicht dem Buchhaltungssystem an einem der beiden Enden.

Stammdatenabgleich FAQ

Häufige Fragen

Was gehört zur Synchronisation von Kunden- und Lieferantenstammdaten tatsächlich dazu?

Die Datensätze zu lesen, die im Buchhaltungssystem Ihres Kunden bereits bestehen, sie gegen die in Ihrem Produkt zuzuordnen, auf beiden Seiten anzulegen, was fehlt, und zu korrigieren, was sich geändert hat. Der dokumentierte Ablauf setzt den Abgleich in die Mitte und nicht ans Ende, und das ist die richtige Reihenfolge: alles danach hängt daran, dass entschieden ist, welche Datensätze derselbe Datensatz sind.

Sollen wir /contacts lesen oder /customers und /suppliers?

Was das System vor Ihnen unterstützt, und das ist wirklich eine Frage je System und keine des Geschmacks. Die meisten Buchhaltungssysteme halten Kunden und Lieferanten getrennt und geben sie als zwei Listen heraus, und das ist der Weg mit der größten Reichweite. Eine Handvoll führt sie zusammen und gibt stattdessen eine kombinierte Liste heraus, und dort ist der kombinierte Endpunkt der einzige Weg hinein. Beides zu bauen ist der einzige Weg, alles zu erreichen.

Wie entscheiden wir, dass zwei Datensätze dieselbe Firma sind?

Ihr Produkt entscheidet, und die Dokumentation sagt ehrlich, dass sie Ihnen die Felder gibt und nicht die Antwort. Sie schlägt vor, über die Umsatzsteuer-Identifikationsnummer, die E-Mail-Adresse und den Firmennamen zuzuordnen. Die erste davon ist eine echte Kennung, und sie steht in der dokumentierten Feldliste von kaum einem System, auf den übrigen vergleichen Sie also einen Namen und eine E-Mail-Adresse. Wo Sie die Toleranz setzen und was mit einem knappen Treffer geschieht, ist eine Entscheidung über Ihre Daten.

Können wir einen Datensatz im System des Kunden korrigieren oder nur anlegen?

Beides, auf den meisten Systemen, und der Unterschied zählt hier mehr als bei jedem anderen Use Case. Einen Kunden zu lesen wird breit unterstützt, einen anzulegen auf weniger Systemen und einen zu aktualisieren auf noch weniger. Auf manchen Systemen, die einen neuen Kunden annehmen, gibt es keine dokumentierte Aktualisierung, der Datensatz landet dort also einmal, und die zwei Kopien laufen von da an auseinander. Das ist eine Eigenschaft je System, und sie lohnt sich zu prüfen, bevor Sie zusagen, dass Daten im Gleichstand bleiben.

Werden wir benachrichtigt, wenn sich auf ihrer Seite etwas ändert?

Auf den Systemen, die Ereignisse senden, ja. Maesn bietet ein einheitliches Webhook-Abonnement statt einer Integration je System, und die Dokumentation nennt die Systeme, die sie unterstützen: es sind neun, und sechs davon veröffentlichen Ereignisse zu Kundendatensätzen. Überall sonst lautet die Antwort, das zu lesen, was sich seit Ihrem letzten Lauf geändert hat, und das ist ein Abfrageparameter und kein Projekt.

Wie vermeiden wir, bei jedem Abgleich alles neu zu lesen?

Ein lastModified-Parameter auf jedem GET-Endpunkt gibt nur das zurück, was sich seit dem Zeitstempel geändert hat, den Sie mitgeben. Das ist der Mechanismus dahinter, zwei Systeme im Gleichstand zu halten, ohne eine eigene Delta-Logik zu bauen, und er arbeitet auf jedem angebundenen System gleich, und genau das wäre sonst Arbeit je Hersteller.

Können wir einen Kontakt über die API löschen?

Kein Objekt des Modells hat heute Löschen freigeschaltet. Für Buchhaltungsdaten ist das weniger einschränkend, als es klingt: ein Kunde mit Historie wird dort normalerweise deaktiviert und nicht entfernt, und Korrekturen werden als neue Belege erwartet. Es heißt aber, dass ein Duplikat, das Sie angelegt haben, nicht mit einem Löschaufruf aufzuräumen ist, und deshalb legt man besser keines an.

Was verhindert, dass derselbe Datensatz zweimal geschrieben wird?

Ihre Zuordnung. Der dokumentierte Ablauf sieht vor, dass Sie vor dem Schreiben abgleichen, und genau dieser Schritt verhindert eine zweite Kopie. Nichts in der Dokumentation beschreibt eine Zusage zur Entdopplung auf unserer Seite, die sichere Annahme ist also die gewöhnliche: entscheiden, was schon da ist, und dann nur schreiben, was es nicht ist.

Was, wenn ein System ein Feld führt, das das gemeinsame Modell nicht trägt?

Dafür gibt es einen dokumentierten Weg, und in diesem Use Case kommt er oft vor, weil Kennungen sich nach Land unterscheiden. Ein Rohdaten-Schalter gibt die eigene Nutzlast des Zielsystems neben dem normalisierten Datensatz zurück, damit Sie sehen, was es wirklich führt, und ein nativer Aufruf über den Durchleitungs-Endpunkt erreicht das System direkt, auf der Anbindung, die Sie ohnehin haben.

Ist das derselbe Kontaktabgleich, auf den sich die anderen Use Cases beziehen?

Ja, und deshalb lohnt es sich, ihn zuerst zu bauen. Der Leitfaden zur Debitorenbuchhaltung und der zur Rechnungserstellung beginnen beide damit, und der Leitfaden zu Ausgaben nennt ihn als den Schritt, der die Lieferanten an ihren Platz bringt. Eine Rechnung verweist auf einen Kunden und eine Ausgabe auf einen Lieferanten, der Datensatz muss also auf beiden Seiten vorhanden sein und dasselbe bedeuten, bevor einer dieser Abläufe richtig sein kann.

Einmal bauen, auf der Unified API.

Sehen Sie, wie Stammdatenabgleich für Ihre Integration funktioniert, oder steigen Sie in die technische Referenz ein.