maesn
Use Case

Zahlungsabgleich, gebucht dort, wo das Hauptbuch liegt

Ihre Engine weiß bereits, welche Zahlung welche Rechnung ausgleicht. Was sie nicht weiß, ist, ob das System dieses Kunden das als zweiseitigen Buchungssatz erwartet oder als Zahlung auf einen Beleg, den es schon führt. Maesn liefert beide Wege und die Konten, die jeder braucht.

Eine abgeglichene BuchungjournalLineItems[]
  • DEBITDas Bankkonto, auf dem sie landete
  • CREDITDie Forderung, die sie ausgleicht
beide Seiten müssen benennen
Ein Konto aus ihrem Kontenrahmen
Über einen Aufruf lesbar, in einer Form

Es gibt kein Feld für das Gegenkonto. Die zweite Seite ist eine zweite Zeile, und der Leitfaden erwartet, dass Sie beide benennen.

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

Ein abgeglichenes Ergebnis, zwei unvereinbare Ziele

Die Abgleich-Engine zu bauen ist schwer und begrenzt. Ihr Ergebnis ins Hauptbuch zu bringen ist weder das eine noch das andere, denn das Hauptbuch ist bei jedem Kunden ein anderes, und sie sind sich nicht einig, wie ein Ausgleich aussieht.

Wie sich die dreizehn erreichbaren Systeme auf die zwei dokumentierten Wege verteilen
7Nur Buchungssatz
bexio, DATEV Rechnungswesen, Dinero, Fortnox, odoo, QuickBooks, Twinfield
3Beide Wege
Exact Online, Business Central, Xero
3Nur Zahlung
Lexware Office, sevdesk, Visma e-conomic
Nur drei der 30+ angebundenen Systeme nehmen beides an, und das ist damit keine Vorliebe mit Rückfallebene. Einen Buchungssatz zu schreiben heißt, beide Seiten der Buchung selbst zu benennen; eine Zahlung zu schreiben heißt, das Geld dem System zu übergeben und es eine Rechnung ausgleichen zu lassen, die es bereits führt. Welches davon Ihr Produkt erzeugen muss, entscheidet das System des Kunden und nicht Ihre Architektur.

Die Arbeit, die Ihr Produkt vorgelagert leistet, ist der Teil, den niemand sonst für Sie tun kann: verzögerte Gutschriften, gebündelte Auszahlungen, Gebühren, Währung, Erstattungen. Das Ergebnis davon ist sauber und einfach, ein Satz Buchungen, bereit zum Buchen. Dann sagt ein Kunde, er sei auf DATEV, oder auf Twinfield, oder seine niederländische Gesellschaft laufe auf Exact Online, und aus einem begrenzten Entwicklungsproblem wird ein offenes.

Offen wird es nicht durch die Zahl der Anbindungen, sondern dadurch, dass sie sich über das Objekt uneinig sind. Ein Buchungssatz verlangt, beide Seiten der Buchung zu benennen, und das heißt, den Kontenrahmen des Kunden zu kennen und zu entscheiden, welches Konto jede Seite trifft. Eine Zahlung verlangt weniger und etwas anderes: ein Konto, einen Betrag, und die Kennung der Rechnung, die sie ausgleicht, denn das System führt diese Rechnung bereits und ordnet ihr das Geld zu. Das sind verschiedene Funktionen in Ihrem Produkt und nicht zwei Adapter um eine Funktion.

Und die Aufteilung ist auf eine Weise ungleich, die bei der Planung zählt. Der Weg, der die meisten Systeme erreicht, ist zugleich der, der Ihnen am meisten abverlangt, also erreicht ein Produkt, das nur den leichteren umsetzt, eine Handvoll Systeme, und eines, das nur den schwereren umsetzt, verfehlt die, die ihn nicht annehmen. Die Lesezugriffe hinter beiden Wegen kommen aus Stammdaten, die vorher zusammenpassen müssen, und das ist ein eigener dokumentierter Use Case.

Wie Maesn das löst

Eine Buchungsform, und die Konten, auf die sie verweisen muss

Was eine abgeglichene Buchung tragen darf, ist je System dokumentiert, und die Felder, die jedes System annimmt, sind genau die, die eine Buchung zu einer Buchung machen.

Dokumentiert auf den Systemen mit einer Feldliste für diesen Endpunkt
debitCreditIndicatorWelche Seite des Buchungssatzes diese Zeile ist, Soll oder Haben.9 von 9
accountId / accountNumberDas Konto, unter dem Namen, den dieses System nutzt.9 von 9
taxRateDer Satz, auf den Systemen, deren Buchungssatz einen trägt.6 von 9
dimensionsKostenstelle oder Abteilung, als benannte Kategorie.4 von 9
journalCodeIn welches Journal der Buchungssatz gehört, wo es mehrere gibt.4 von 9
files / filesPosDer Auszug oder Beleg, an den Buchungssatz gehängt.5 von 9
Die oberen zwei stehen auf jedem System, und das macht einen abgeglichenen Buchungssatz überhaupt erst übertragbar. Alles darunter ist die Stelle, an der die Systeme aufhören, sich einig zu sein, und eine Buchung, die von einem Journalcode oder einer Kostenstelle abhängt, ist eine Buchung, deren Machbarkeit eine Frage je System ist. Der Buchungssatz trägt außerdem eine Buchungsperiode und ein Stornokennzeichen, eine Korrektur ist also eine dokumentierte Form und kein Behelf.

Die zwei Felder, die jedes System hat, sind das Konto und die Seite, und das ist die ganze doppelte Buchführung und der Grund, warum eine abgeglichene Buchung überhaupt übertragbar ist. Alles darüber hinaus ist die Stelle, an der sich Systeme unterscheiden, und die Unterschiede sind vor dem Bau bekannt: dieselben normalisierten Objekte liefern den Kontenrahmen, die Steuersätze und die Journale, auf die Ihre Buchung verweist, und ein Steuersatz kommt häufig ohne Regel zu seiner Anwendung an, und das ist eine Entscheidung, die bei Ihnen bleibt, und keine, die die Anbindung trifft.

Zwei Dinge, die die Buchung trägt, sind zu nennen, weil man sie leicht übersieht. Sie nimmt eine Buchungsperiode, eine Buchung kann also in der Periode landen, in die sie gehört, und nicht in der, in der sie gesendet wurde. Und sie nimmt ein Storno-Kennzeichen, eine Korrektur hat also eine dokumentierte Form. Anhänge funktionieren genauso: die Anfrage ist mehrteilig, und eine Datei kann an eine bestimmte Zeile gebunden werden, so landet ein Kontoauszug an der Buchung statt in einem Ordner. Wo ein System etwas führt, wofür das gemeinsame Modell kein Feld hat, ist am Modell vorbeizugreifen dokumentiert, und der Kunde gibt das alles einmal frei.

Was die Anbindung nicht tut, ist die Buchführung zu entscheiden. Der Leitfaden verlangt, für jede Buchung das Konto und das Gegenkonto anzugeben, und das ist die richtige Aufteilung: welches Konto eine Gebühr trifft, wie sich eine gebündelte Auszahlung aufteilt, und in welche Periode sie gehört, sind Fragen an die Bücher Ihres Kunden, die keine Integrationsschicht beantworten kann.

Was Sie bekommen

Ein Stapel Buchungen, gebucht so, wie jedes System sie annimmt

Ein Abgleichlauf erzeugt nicht eine Buchung, er erzeugt einen Zyklus davon. Ein System im Besonderen ist genau dafür gebaut, und sein Weg ist verschieden genug, um ihn einzuplanen.

Die meisten Systeme
POST /journalEntries

Ein Buchungssatz je Aufruf, und die Antwort sagt Ihnen, ob er gebucht wurde. Das ist der Weg, den die Feldlisten darüber beschreiben, und die neun Feldlisten auf diesem Endpunkt sind sich darüber alle einig.

DATEV Rechnungswesen
POST /journalEntries/bulk

Eine Liste von Buchungssätzen in einem Aufruf, und die Antwort ist eine Aufgabe und kein Ergebnis. Sein eigener Leitfaden nennt dafür GET /asyncTask und darüber erfahren Sie, ob der Stapel angenommen wurde.

documentIdasyncTask
Warum das wie eine Lücke aussah und keine ist

DATEV Rechnungswesen steht nicht auf der Feldliste des Endpunkts für die einzelne Buchung, und das liest sich wie fehlende Unterstützung, bis man seinen eigenen Leitfaden findet. Es bucht von Haus aus über den Stapelweg, und das ist auch die Form, die ein Abgleichlauf will: ein Ausgleichszyklus erzeugt viele Buchungssätze auf einmal und nicht einen.

Der Stapelweg passt besser zu diesem Use Case, und der Grund ist strukturell und keine Frage der Bequemlichkeit: ein Ausgleichszyklus erzeugt viele Buchungen auf einmal, und sie mit je einem Aufruf zu buchen macht aus einem einzigen Geschäftsvorfall eine Warteschlange, die Sie verwalten müssen. Eine Liste zu übergeben und das Ergebnis abzufragen ist die Form, die die Arbeit ohnehin hat. Von Anfang an für diese Antwort zu bauen ist weit billiger als Nachrüsten, denn ein Schreibvorgang, der eine Aufgabe zurückgibt, und einer, der ein Ergebnis zurückgibt, brauchen verschiedene Fehlerbehandlung um sich herum.

Die praktische Folge ist ein zweiter Codepfad, und er sollte früh eingepreist werden. An DATEV Rechnungswesen zu buchen heißt, eine Liste zusammenzustellen, sie zu übergeben und eine Auftragskennung gegen das zu halten, was Sie gesendet haben. An Xero zu buchen heißt ein Aufruf je Buchung und eine Antwort in der Rückmeldung. Dieselbe Buchung, zwei verschiedene Programme darum herum, und der Unterschied ist unsichtbar, bis der erste Kunde auf dem anderen System ankommt.

Beleg

Das System, um das es hier geht, in den Worten eines Kunden

Rally hat eine direkte DATEV-Integration durch eine Schnittstelle ersetzt.

“Maesn hat vollständig verändert, wie wir an DATEV anbinden. Was eine komplexe Direktintegration geworden wäre, wurde dank ihrer REST-API und der DATEV-Sandbox ein reibungsloses, eingängiges Verfahren.”
Thiago Peres
CTO, Rally

Rally ist der Gegenstand dieser Seite von der anderen Seite her. Das Zitat nennt DATEV, und es nennt die Sandbox, und das ist der Teil, auf den es einem Team ankommt, das Buchungen schreibt: ein Ort, an dem man die Form eines Buchungssatzes richtig hinbekommt, bevor er in den Büchern eines Kunden landet. Ihr veröffentlichter Bericht beschreibt, wie eine komplexe Direktintegration ersetzt wurde, und der Abschnitt darüber ist die konkrete Fassung dessen, was damit ersetzt wird. Systeme wie Business Central sitzen auf der anderen Seite der Teilung und nehmen beide Wege, und sevdesk nimmt nur die Zahlung, und um diesen Unterschied geht es im ersten Abschnitt.

Die Eckdaten

Beide Wege und ihre Bezüge, je System gezählt

Die zwei Wege, auf denen ein abgeglichenes Ergebnis ankommen kann, dann die Bezüge einer Buchung, gezählt aus der Dokumentation des jeweiligen Systems.

Über die 30+ angebundenen Systeme
Was Sie brauchenHeuteAuf AnfrageSystem kann es nicht
Buchungssätze, schreiben10118
Zahlungen, schreiben6167
Kontenrahmen, lesen1982
Steuersätze, lesen12143
Journale, lesen5159
Dimensionen, lesen3179
Bankzeilen, lesen0218
Die ersten zwei Zeilen sind die zwei Wege, auf denen ein abgeglichenes Ergebnis landen kann, und sie sind fast ausschließende Mengen und keine Zahl, die in zwei Hälften zerfällt. Darunter sitzt das, worauf eine Buchung zeigt, und es dünnt aus, je genauer es wird. Die letzte Zeile ist die, die am härtesten zu lesen ist: Bankzeilen sind auf keinem der angebundenen Systeme lesbar, den Abgleich selbst leistet diese Anbindung also nie für Sie.

Lesen Sie die oberen zwei Zeilen zusammen statt getrennt. Sie sind fast getrennte Mengen von Systemen, sie zu addieren beschreibt also nichts, und eine von beiden als die Zahl zu nehmen würde die eine zu groß machen und die andere verbergen. Die Zeilen darunter sind das, worauf ein Buchungssatz verweisen muss, und sie dünnen in der üblichen Richtung aus: Konten fast überall, Steuersätze auf den meisten, Journale und Dimensionen auf einer Handvoll.

Die letzte Zeile ist die, um die herum diese Seite gebaut ist. Bankzeilen sind auf keinem der angebundenen Systeme lesbar, hier vergleicht also nichts einen Kontoauszug mit offenen Rechnungen. Deshalb hören auch die Debitorenseite und die Kreditorenseite beide beim Beleg auf und nicht bei der Bank, und deshalb ist nur das zu lesen, was sich geändert hat, der Weg, die offenen Posten aktuell zu halten, mit denen Sie abgleichen.

Wo die Grenze verläuft

Sie gleichen ab, wir buchen das Ergebnis

Das ist die eine Seite dieser Familie, auf der die Grenze schon von ihrer Vorgängerin richtig gezogen war, und die Abdeckung ist der Grund, warum sie hält.

Was Maesn liefert
  • Beide dokumentierten Buchungswege
  • Die Konten, Sätze und Journale
  • Stapelbuchung, wo es sie gibt
  • Der Anhang, am Buchungssatz
Was Ihr Produkt bleibt
  • Was jede Zahlung ausgleicht
  • Welches Konto jede Seite trifft
  • Wie sich eine Sammelzahlung teilt
  • Wann die Buchung geschrieben wird

Alles links ist die Anbindung: zwei Wege ins Hauptbuch statt einer Anbindung je Buchhaltungsplattform, die Stammdaten, auf die ein Buchungssatz verweisen muss, unter einem Satz Feldnamen, der Stapelweg, wo ein System ihn anbietet, und eine Datei, die mit der Buchung mitreist. Das ist der Teil, der sonst mit jedem Kunden wächst, der etwas Neues einsetzt.

Alles rechts ist Ihre Engine, und in diesem Use Case ist das die Substanz. Welche Zahlung welche Rechnung ausgleicht, ist eine Frage nach Daten, die wir nicht sehen, denn Bankzeilen sind über kein angebundenes System lesbar. Wie sich eine gebündelte Auszahlung aufteilt, auf welches Konto eine Gebühr gehört und wann ein Zyklus bucht, sind Entscheidungen über die Bücher Ihres Kunden und den Ablauf Ihres Produkts.

Zwei Dinge gehören hierher, weil die Seite, die diese ersetzt, sie unter die falsche Überschrift gestellt hat. Dass eine Buchung zweimal gebucht wird, verhindert Ihr Schreibvorgang dadurch, dass er einmal stattfindet, und keine Zusage von uns, und weil kein Objekt Löschen freigeschaltet hat, ist die Korrektur einer Doppelbuchung eine Stornierung und keine Entfernung. Und die steuerliche Behandlung eines Buchungssatzes bleibt bei Ihnen: wir liefern die Sätze, die das System veröffentlicht, in der Form, in der es sie veröffentlicht. Der lastModified-Filter sorgt dafür, dass die Konten und Sätze, die Sie zwischengespeichert haben, nicht von denen abweichen, die Ihr Kunde sieht.

Eine Zahlung einem offenen Posten zuzuordnen ist die Monatsabschlussarbeit von Finanzteams, und sie ist der Grund, warum die zwei Schreibwege für sie überhaupt zählen.

Zahlungsabgleich FAQ

Häufige Fragen

Gleicht Maesn die Zahlungen für uns ab?

Nein, und diese Grenze kommt vor allem anderen. Bankzeilen sind auf keinem der angebundenen Systeme lesbar, hier kann also nichts einen Kontoauszug mit offenen Rechnungen vergleichen. Ihr Produkt oder Ihr Zahlungsdienstleister entscheidet, was was ausgleicht. Diese Anbindung nimmt das Ergebnis dieser Entscheidung und bucht es in das Buchhaltungssystem, das der Kunde fährt.

Wie kommt ein abgeglichenes Ergebnis ins Hauptbuch?

Auf einem von zwei dokumentierten Wegen, und welcher gilt, hängt vom System ab. Zehn Systeme nehmen einen Buchungssatz an, bei dem Sie beide Seiten der Buchung selbst benennen. Sechs nehmen eine Zahlung auf eine Rechnung an, die das System bereits führt, und gleichen selbst aus. Nur drei nehmen beides an, die Form, die Ihre Engine erzeugen muss, ist Ihnen also zum Teil vorgegeben.

Warum gibt es kein Feld für das Gegenkonto?

Weil die zweite Seite einer Buchung eine zweite Zeile ist und kein Feld. Der Buchungssatz trägt eine Liste von Positionen, jede mit einem Kennzeichen, ob sie die Soll- oder die Habenseite ist, und jede mit ihrem eigenen Konto. Das ist gewöhnliche doppelte Buchführung, und es heißt, dass ein gebündelter Ausgleich mit mehreren Zuordnungen dieselbe Form hat wie ein einfacher, nur mit mehr Zeilen.

Können wir einen ganzen Ausgleichsstapel auf einmal buchen?

Auf DATEV Rechnungswesen ist das der dokumentierte Weg: eine Liste von Buchungssätzen in einem Aufruf, beantwortet mit einer Aufgabe, deren Ergebnis Sie danach abfragen. Anderswo nimmt der Endpunkt einen Buchungssatz je Aufruf. Für ein Abgleichprodukt ist dieser Unterschied Architektur und keine Kosmetik, denn ein Ausgleichszyklus erzeugt viele Buchungssätze auf einmal, und die zwei Wege wollen verschiedenen Code um sich herum.

Können wir den Kontoauszug oder den Beleg anhängen?

Auf den Systemen, deren Feldliste es dokumentiert, ja. Die Buchung ist eine mehrteilige Anfrage und nimmt Dateien neben dem Buchungssatz an, mit einem Positionsfeld, damit ein Anhang zu einer bestimmten Zeile gehören kann und nicht zum ganzen Beleg. So landet ein Kontoauszug oder ein Beleg am Buchungssatz und nicht in einem Ordner, den später jemand zuordnen muss.

Was ist mit Kostenstellen auf der Buchung?

Dokumentiert auf einem Teil der Systeme, die für diesen Endpunkt eine Feldliste veröffentlichen, als benannte Dimensionskategorie auf der Zeile. Die verfügbaren Dimensionen wieder herauszulesen ist noch dünner, und die zwei Mengen sind nicht dieselben. Eine Auswertung nach Kostenstellen lässt sich also für benannte Systeme bauen und nicht allgemein, und das ist ein besserer Satz vor einem Kunden als eine Zusicherung.

Bildet Maesn unsere Kategorien auf ihre Konten ab?

Nein. Der dokumentierte Ablauf sieht vor, dass Sie für jeden Buchungssatz das Konto und das Gegenkonto angeben, und Maesn liefert das Rohmaterial für diese Entscheidung: den Kontenrahmen des Kunden, seine Steuersätze und seine Journale, in einer Form auf jedem System. Das erlaubt Ihnen, eine Zuordnungsoberfläche einmal zu bauen statt einmal je Buchhaltungsplattform, die Zuordnung selbst gehört aber Ihrem Produkt.

Wie vermeiden wir, dieselbe Buchung zweimal zu schreiben?

Indem Sie dafür sorgen, dass der Schreibvorgang auf Ihrer Seite einmal stattfindet, und das ist die gewöhnliche Antwort und die ehrliche. Nichts in der Dokumentation beschreibt hier eine Zusage zur Entdopplung, ein neuer Versuch nach einer unklaren Antwort sollte also prüfen, bevor er wiederholt. Das lohnt sich einzuplanen, denn kein Objekt des Modells hat Löschen freigeschaltet, und ein zweimal geschriebener Buchungssatz wird deshalb storniert und nicht entfernt.

Können wir eine Buchung stornieren, die sich als falsch erwiesen hat?

Der Buchungssatz trägt ein Stornokennzeichen, eine Korrektur ist also eine dokumentierte Form und keine Improvisation. Das passt ohnehin dazu, wie Buchhaltungssysteme Korrekturen erwarten: als neuen Beleg, der den alten aufhebt und beide in der Prüfspur sichtbar lässt, und nicht als Änderung, die das Original verschwinden lässt.

In welche Systeme können wir abgeglichene Buchungen schreiben?

Dreizehn der angebundenen Systeme nehmen heute den einen oder den anderen Weg an, und weitere sind in ihrer eigenen Dokumentation als auf Anfrage verfügbar markiert. Die nützlichere Frage ist welche, denn die Aufteilung ist ungleich: sieben nehmen einen Buchungssatz und keine Zahlung, drei nehmen eine Zahlung und keinen Buchungssatz, und drei nehmen beides.

Einmal bauen, auf der Unified API.

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