maesn
Use Case

Finanzanalyse und Finanzplanung auf Daten aus dem Hauptbuch

Buchhaltungssysteme behalten die fertigen Zahlen für sich. Was sie herausgeben, sind die Belege darunter: die Buchungen, die Forderungen und der Kontenrahmen. Maesn liefert sie in einer Form, über jedes System, das Ihre Kunden einsetzen.

Wonach eine Planung fragt
Die fertige ZahltrialBalance
Zurückgegeben von DATEV Rechnungswesen und Sage Active
also fragt sie nach den Belegen
  • Die BuchungenjournalEntries
  • Die Forderungeninvoices
  • Der Kontenrahmenaccounts

Aus der Dokumentation je System gelesen und nicht aus einer Zusammenfassung.

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

Ein Report-Endpunkt über alle angebundenen Systeme

Ein Planungsprodukt würde die Antwort gern nehmen, wenn das Buchhaltungssystem eine anböte. Es tut das nicht, und der Abstand zwischen dem, was berechnet wird, und dem, was lesbar ist, ist die ganze Form dieser Anbindung.

Heute lesbar
Die Antworten

Verdichtungen, die das Buchhaltungssystem bereits gerechnet hat.

Journale
5
Dimensionen
3
Summen- und Saldenliste
2
Offene Posten
2
Geschäftsjahre
2
Transaktionen
0
Die Belege

Belege und Stammdaten, aus denen die Verdichtungen bestehen.

Kunden
20
Konten
19
Rechnungen
13
Steuersätze
12
Buchungssätze
11
Eingangsrechnungen
8
Aus der Dokumentation je System gezählt. Wer die ganze API-Referenz nach Analyse, Bericht, Planung, Abschluss, Gewinn, Verlust und Saldo durchsucht, findet einen Endpunkt, und das ist die Summen- und Saldenliste.

Jede dieser Zahlen existiert im Buchhaltungssystem. Es kennt den Saldo jedes Kontos, es weiß, welche Forderungen ihr Datum überschritten haben, und es weiß, wann das Geschäftsjahr wechselt, denn es zeigt alle drei auf einem Bildschirm, den der Kunde jede Woche ansieht. Was es meistens nicht tut, ist eine Frage dazu über eine Schnittstelle zu beantworten, und das ist der Unterschied, den ein Finanzprodukt erst entdeckt, nachdem es eine Roadmap versprochen hat.

Es liegt nahe, diese Lücken als Rückstand zu lesen, und bei der größten ist sie keiner. Bei der Summen- und Saldenliste sind fast alle Systeme als ohne eigenen Endpunkt vermerkt, sodass auch beliebig viel Integrationsarbeit dort nichts öffnet. Die übrigen dünnen Zeilen sind meist als auf Anfrage verfügbar markiert, und was diese Markierung verspricht, ist eine offene Frage und kein Datum, also ist die einzige sichere Lesart, dass sie heute nicht verfügbar sind.

Die Schicht darunter erzählt eine andere Geschichte, und sie ist der Grund, warum es diese Seite gibt. Belege überleben, wo Aggregate es nicht tun: die Buchungen, die Forderungen, die Verbindlichkeiten, der Kontenrahmen und die Sätze dahinter kommen alle in Menge zurück. Die Arbeit besteht also nicht darin, eine Antwort zu holen, sondern eine zu bauen, aus Belegen, die in derselben Form ankommen, wie viele Systeme Ihre Kunden auch betreiben. Und das ist in der Regel auch das, was ein Planungsprodukt will. Ein Modell, das jemand anderes schon gerechnet hat, ist kein Unterscheidungsmerkmal.

Wie Maesn das löst

Die Buchungen und Rechnungen, auf denen Ihr Modell wirklich rechnet

Eine Anbindung, eine Objektform, und eine Eigenheit je System, die man kennen sollte, bevor man dagegen baut: nicht jedes Hauptbuch gibt eine Buchung mit einer Nummer zurück.

Eine Buchung, wie sie zurückkommtjournalEntries
  • transactionDateWann sie gebucht wurde
  • descriptionWofür sie war
  • journalTypeIn welchem Journal sie sitzt
journalLineItems[]6 von 9 Feldlisten

Das Konto, die Soll- oder Habenseite und der Betrag liegen alle hier. Alles, was ein Modell summiert, steckt in diesem einen Block.

Feldnamen aus der dokumentierten Antwort. Die Systeme, die für diesen Endpunkt eine Feldliste veröffentlichen, und die Systeme, die als lesbar geführt werden, sind nicht dieselbe Menge, und keine von beiden enthält die andere.

Ohne diesen Block

Auf einem Teil der dokumentierten Feldlisten dokumentiert die Referenz keine Positionen, und eine Buchung kommt dort mit einem Datum, einer Beschreibung und einem Journalcode an, und ohne eine Zahl daran.

Exact OnlinefortnoxOdoo
Und der Betrag ist nicht ein Feld

Von denen, die Zeilen tragen, dokumentieren manche nur den Bruttobetrag, Dinero nur den Nettobetrag, und Xero netto, Steuer und brutto zusammen. Den falschen zu summieren ist auf jeder Zeile um die Steuer falsch.

Eine Buchung ist die kleinste ehrliche Einheit, mit der ein Finanzmodell arbeiten kann. Sie trägt das Datum, das Konto, die Soll- oder Habenseite und den Betrag, und alles, was ein Bericht zusammenfasst, ist eine Summe über diese Zeilen. Maesn normalisiert dieses Objekt über die Systeme hinweg, der Code, der Buchungen zu einem Zeitraum, einem Konto oder einer Kostenstelle gruppiert, wird also einmal geschrieben und nicht einmal je Buchhaltungsplattform.

Die Normalisierung endet bei den Feldern, die ein System nicht veröffentlicht, und dieser Endpunkt hat dafür das schärfste Beispiel im Modell. Sichtbar wird es, wenn man die Feldlisten liest statt der Form der Antwort: auf einem Teil der dokumentierten Systeme hat die Antwort keine Positionen, eine Buchung kommt also beschrieben, aber nicht beziffert zurück. Wer lesbare Systeme zählt und auf die Summe baut, setzt diese Buchungen als wertlos in eine Planung.

Die Forderungsseite ist die erfreulichere, und dort findet die meiste Arbeit an der Liquidität tatsächlich statt. Rechnungen sind breit lesbar und tragen überall dort, wo sie dokumentiert sind, einen Status, und das reicht, um ein Hauptbuch nach Fälligkeit zu staffeln, ohne dass es einen Endpunkt dafür gibt. Eingangsrechnungen geben dasselbe Bild auf der Verbindlichkeitsseite. Zusammen beantworten sie, was offen ist und wann es fällig wird, und das ist die Eingabe, mit der ein Liquiditätsmodell die meiste Zeit verbringt.

Die Menge ist die andere Hälfte des Problems, denn ein Modell, das Historie will, will Jahre von Buchungen und nicht die von gestern. Lesezugriffe sind über die Systeme hinweg auf eine Weise paginiert und filterbar, ein inkrementeller Abruf hält eine Aktualisierung im Verhältnis zu dem, was sich geändert hat, und wo ein System einen großen Lesezugriff als Hintergrundaufgabe statt als Antwort beantwortet, kommt das als eine asynchrone Aufgabe, die Sie abfragen. Die Objektformen selbst kommen aus dem Common Data Model, und die Verbindung, die jeder Kunde einmal freigibt, ist in Unified Authentication beschrieben.

Was Sie bekommen

Eine Summen- und Saldenliste, wo es sie gibt, eine Fälligkeitsstruktur, die Sie selbst bauen

Wo es einen fertigen Bericht gibt, steht hier genau, was er enthält. Und wo es ihn nicht gibt, stehen hier die Felder, mit denen Sie den bauen, den eine Planung wirklich braucht.

Der eine Report-EndpunkttrialBalance
DATEV Rechnungswesen
accountNameaccountNumberbalancemonthlyValues[]openingBalancetotalDebitAmounttotalCreditAmount

Gibt einen Saldo je Monat und Konto zurück, dazu den Eröffnungssaldo und beide Summen. Das ist eine Zeitreihe, und genau die will ein Modell.

Sage Active
accountCodeaccountNamebalance

Gibt den Saldo so zurück, wie er steht. Wie das Konto dorthin kam, steht nicht in der Antwort, und die Reihe muss deshalb ohnehin aus den Buchungen kommen.

Beide verlangen zuerst fiscalYearStartDate und antworten sonst nicht, und Geschäftsjahre sind lesbar auf DATEV Rechnungswesen und DATEV Unternehmen Online. Sage Active ist nicht darunter, und auf einem der zwei fragt der Endpunkt damit nach etwas, das dieses System Ihnen nicht sagt.

Die Folge ist ein Importer, der sich nicht einmal schreiben lässt. Ein Produkt, das “Summen- und Saldenliste unterstützt” von einer Fähigkeitsliste abliest, baut für die reichere Antwort, liefert aus und stellt fest, dass derselbe Code auf dem anderen System eine einzige Zahl hat und keine Möglichkeit zu sehen, wie das Konto dorthin kam. Dort muss die Reihe aus den Buchungen neu gebaut werden, und das ist ein zweiter Codepfad und kein Konfigurationsschalter.

Die Parameterabhängigkeit lohnt aus demselben Grund, eingeplant zu werden. Wo das Geschäftsjahr nicht lesbar ist, muss sein Startdatum von woanders in Ihre Anfrage kommen, und das heißt in der Praxis, den Kunden beim Onboarding zu fragen und die Antwort zu speichern. Das ist ein Feld auf einem Einrichtungsformular, wenn Sie es in Woche eins wissen, und eine Migration, wenn Sie es in Woche neun erfahren.

Über die Systeme hinweg, deren Rechnungsfelder dokumentiert sind
  • status13 von 13Wo die Rechnung stehtAuf jedem dokumentierten System.
  • dueDate12 von 13Wann sie fällig warFehlt nur auf Xentral.
  • totalAmount12 von 13Wie viel offen istFehlt nur auf Xentral.
  • paidDate6 von 13Wann sie tatsächlich bezahlt wurdeDas eine, das Verhalten modelliert.

Kein Objekt in diesem Modell heißt Fälligkeitsstruktur, und die ersten drei Zeilen sind alles, was man braucht, um eine zu bauen: ein Status, ein Fälligkeitsdatum und ein Betrag, gestaffelt danach, wie weit jede Rechnung überfällig ist. Die Verbindlichkeitsseite funktioniert aus Eingangsrechnungen genauso, und so erzeugt derselbe Code beide Hälften einer Working-Capital-Sicht.

Die vierte Zeile ist abgesetzt, weil sie einen Bericht von einer Planung trennt. Zu wissen, dass eine Rechnung überfällig ist, sagt Ihnen, wo sie heute steht. Zu wissen, wann sie tatsächlich ausgeglichen wurde, sagt Ihnen, wie dieser Kunde zahlt, und darauf allein lässt sich eine Vorausschau bauen. Wo dieses Datum fehlt, muss das Zahlungsverhalten aus Statusänderungen über die Zeit erschlossen statt gelesen werden, und von Anfang an dafür zu entwerfen ist billiger, als es nachzurüsten, sobald ein Kunde auf einem der Systeme ankommt, die es brauchen. Buchungen sind der Rückfall für beides, denn dort wird eine ausgeglichene Zahlung überhaupt erst festgehalten.

Beleg

Ein Finanzprodukt läuft bereits auf dieser Anbindung

Veröffentlichter Kunde
Finto
Finto baut KI-Finanzsoftware auf dieser API.

Maesn nennt sie auf der eigenen Startseite einen Kunden für KI-Finanzsoftware. Was sie damit gebaut haben, ist ihre Sache zu beschreiben, und mehr sagt das hier nicht.

Kunden, die vollständig berichtet haben, was sie gebaut haben, sind auf der Case-Studies-Seite gesammelt.

Die Eckdaten

Was eine Planung liest, je System gezählt

Die Zeilen, die ein Finanzmodell berührt, aus der Dokumentation des jeweiligen Systems statt aus einer Zusammenfassung.

Über die 30+ angebundenen Systeme
Was Sie brauchenHeuteAuf AnfrageSystem kann es nicht
Die Buchungen selbst11117
Forderungen und ihre Fälligkeiten13142
Verbindlichkeiten und ihre Fälligkeiten8174
Der Kontenrahmen1982
Die Sätze hinter den Zahlen12143
Der Saldo je Konto2819
Was noch offen ist2234
Bankaktivität0218
Aus der Dokumentation je System gelesen. Die letzten drei Zeilen sind die, die eine Planungs-Roadmap am ehesten voraussetzt: der gerechnete Saldo, die offene Position und die Bankaktivität. Die Bankaktivität ist die Null, und sie bleibt eine Null, und deshalb gehört die Modellierung auf Ihre Seite der Grenze.

Die letzte Zeile ist die, um die herum man planen muss, denn sie ist nicht dünn, sondern leer. Bankaktivität kommt von überhaupt keinem angebundenen System zurück, während das Schreiben einer Transaktion für einige Systeme dokumentiert ist. Eine Fähigkeit, die es nur in eine Richtung gibt, liest man aus einer Funktionsliste leicht falsch, und diese hier lohnt zweimal gelesen zu werden: das Objekt, das hier Transaktion heißt, ist ein Sammelbecken für Datensätze, die zu keinem der anderen passen, und nicht die Zeile auf einem Kontoauszug.

Ereignisse lohnt es sich auf dieselbe Weise zu messen. Buchungen veröffentlichen auf manchen Systemen Änderungsereignisse und die Summen- und Saldenliste auf keinem, und ein Produkt, das auf eine Buchung reagieren will, statt sie beim nächsten Durchlauf zu finden, kann das für diese tun und den Rest abfragen. Wie dieser Mechanismus arbeitet und wo seine Kanten liegen, ist das Thema von Unified Webhooks. Die Unterschiede je System, die nach der Normalisierung bleiben und zu denen die Betragsbasis oben gehört, behandelt Customisation Handling, und wie eine teilweise Antwort aussieht, wenn ein System ein Feld auslässt, ist Unified Error Handling.

Die Systeme dieser Klasse, denen ein Finanzprodukt am häufigsten begegnet, sind die deutschen und niederländischen Hauptbücher, und ihr Verhalten auf diesem Endpunkt unterscheidet sich genug, um es vor dem Zuschnitt zu lesen: DATEV Rechnungswesen, das hier als einziges System einen Hauptbuch-Lesezugriff mit einer Aufgabe statt mit einer Antwort beantwortet, Exact Online, Xero und Microsoft Dynamics 365 Business Central.

Wo die Grenze verläuft

Sie modellieren, wir liefern die Zahlen dahinter

Die Planung ist Ihr Produkt. Was diese Anbindung Ihnen schuldet, ist das Material, auf dem sie läuft, in einer Form, aus jedem System, das Ihre Kunden einsetzen.

Maesn liefert
  • Buchungen mit Seite und Betrag
  • Rechnungen und Eingangsrechnungen mit Daten
  • Der Kontenrahmen und die Sätze
  • Paginierte, stückweise Lesezugriffe
Ihrem Produkt gehört
  • Das Modell und seine Annahmen
  • Welche Konten wohin verdichtet werden
  • Wie Zahlungsverhalten gelesen wird
  • Szenarien, Budgets und Abweichung

Die Grenze liegt dort, wo sie liegt, weil die Daten es zulassen, und nicht dort, wo ein Diagramm sie hinsetzen würde. Maesn reicht Anfragen an das Zielsystem durch und normalisiert die Antwort auf dem Rückweg, es gibt also keine zweite Kopie irgendeines Hauptbuchs, die veralten könnte. Das ist eine Sicherheitseigenschaft, bevor es eine Architektureigenschaft ist, und es ist das Thema davon, wie die Verbindung gebaut und betrieben wird.

Es heißt auch, dass der interessante Teil Ihrer bleibt. Zwei Produkte, die dieselben Buchungen über dieselbe Anbindung lesen, erzeugen verschiedene Planungen, denn der Unterschied ist das Modell und nicht die Leitung. Um die Leitung geht es auf dieser Seite, und sie zählt deshalb, weil sie einmal je Buchhaltungsplattform zu bauen die Art ist, wie ein Finanzprodukt ein Jahr damit verbringt, das Modell nicht auszuliefern. Benachbarte Fälle funktionieren genauso: wie ein Ausgleich aussieht, sobald er gebucht ist, ist Debitorenbuchhaltung, das Gegenstück auf der Verbindlichkeitsseite ist Kreditorenbuchhaltung, die Sätze hinter den Zahlen sind Steuerautomatisierung, und die Stammdaten, die einen Kunden in einem System zu demselben Kunden in einem anderen machen, sind Synchronisation von Kunden- und Lieferantenstammdaten.

Eine Grenze entscheidet mehr als die übrigen, weil der Name der Kategorie sie nahelegt: diese Anbindung liest keine Bankzeilen. Bankbewegungen sind auf keinem der angebundenen Systeme lesbar, eine Liquiditätslage, die hier entsteht, kommt also aus der eigenen Sicht des Hauptbuchs darauf, was gebucht wurde, und nicht vom Konto selbst. Braucht Ihr Produkt die Bank, braucht es eine Bankanbindung, und das ist eine andere Leitung mit anderen Regeln. Was durch diese hier ankommt, beginnt bei journalEntries, sobald eine Transaktion eine Buchung geworden ist.

Eine Liquiditätslage, die aus Buchungen statt von der Bank entsteht, ist das, was von Finanzteams verlangt wird.

Finanzanalyse FAQ

Häufige Fragen

Können wir eine Gewinn- und Verlustrechnung oder eine Bilanz ziehen?

Nein, und der Grund ist bestimmt. Es gibt in der API keinen Endpunkt für die Gewinn- und Verlustrechnung und keinen für die Bilanz, und wer die ganze Referenz nach dem Berichtswortschatz durchsucht, findet einen einzigen Endpunkt, die Summen- und Saldenliste. Was Sie stattdessen ziehen, sind die Buchungen, die Rechnungen, die Eingangsrechnungen und der Kontenrahmen, und das ist das Material, aus dem diese Abschlüsse bestehen.

Welche Systeme geben eine Summen- und Saldenliste zurück?

DATEV Rechnungswesen und Sage Active, und sie geben nicht dasselbe zurück. Das eine dokumentiert einen Saldo je Monat und Konto plus den Eröffnungssaldo und beide Summen; das andere dokumentiert den Kontocode, den Kontonamen und den aktuellen Saldo. Beide verlangen ein Startdatum des Geschäftsjahres, bevor sie antworten, und Geschäftsjahre selbst sind nur auf den zwei DATEV-Produkten lesbar.

Sind die Daten in Echtzeit?

Sie sind so frisch, wie Sie es verlangen, und das ist eine andere Zusage. Maesn nennt selbst zwei Wege, aktuell zu bleiben, Ereignisse und Abfragen, und rät, mit der niedrigsten Frequenz abzufragen, mit der Ihr Produkt leben kann, abgewogen gegen die Limits. Ereignisse sind der schnellere Weg, wo es sie gibt: bei Buchungen ist das eine Handvoll Systeme, bei der Summen- und Saldenliste überhaupt keines. Frische ist also eine Entscheidung, die Sie je Objekt treffen, und keine Eigenschaft, die mit der Anbindung kommt.

Können wir für eine Liquiditätsposition Banktransaktionen lesen?

Nein. Bankaktivität ist auf keinem der angebundenen Systeme lesbar, und es gibt überhaupt keinen Endpunkt, um Transaktionen zu lesen: der einzige Transaktions-Endpunkt der Referenz schreibt sie. Es lohnt sich außerdem zu wissen, dass das Transaktionsobjekt in diesem Modell ein Sammelbecken für Datensätze ist, die zu keinem anderen Objekt passen, und keine Bankaktivität, es wäre also auch dort nicht das richtige Objekt, wo es eines gäbe.

Wie bauen wir eine Fälligkeitsstruktur ohne einen Endpunkt dafür?

Aus den Rechnungsfeldern, und die sind da. Jedes dokumentierte System gibt einen Status zurück, und fast alle geben das Fälligkeitsdatum und den Betrag zurück, offene Beträge nach Dauer zu bündeln ist also gewöhnliche Rechnerei auf Daten, die Sie ohnehin haben. Dünner ist das Feld mit dem Datum, an dem eine Rechnung tatsächlich bezahlt wurde, dokumentiert auf sechs.

Was ist hier der Unterschied zwischen Auswertung und Planung?

Mehr oder weniger ein Feld. Eine Auswertung muss wissen, wo jede Rechnung heute steht, und das Statusfeld steht auf jedem dokumentierten System. Eine Planung muss wissen, wie ein bestimmter Kunde tatsächlich zahlt, und das heißt, das Datum, an dem eine Rechnung fällig war, mit dem Datum zu vergleichen, an dem sie ausgeglichen wurde, und das Ausgleichsdatum ist auf sechs von dreizehn dokumentiert. Wo es fehlt, muss das Zahlungsverhalten aus Statusänderungen über die Zeit erschlossen werden, statt gelesen zu werden.

Kommt eine Buchung immer mit Beträgen zurück?

Nein, und das ist der Befund, der ein Team mitten im Bau am ehesten überrascht. Von den Feldlisten, die für das Lesen von Buchungssätzen dokumentiert sind, tragen manche überhaupt keine Positionen: Exact Online, fortnox und Odoo. Eine Buchung kommt von diesen mit einem Datum, einer Beschreibung und einem Journalcode an, und ohne eine Zahl daran. Die übrigen sechs tragen die Zeilen, und selbst unter diesen ist der Betrag auf den meisten als brutto dokumentiert, auf einem als netto und auf einem als alle drei.

Können wir eine Planung nach Kostenstelle oder Abteilung segmentieren?

Für benannte Systeme, nicht allgemein. Die verfügbaren Dimensionen als eigenes Objekt zu lesen ist auf einer Minderheit der Systeme dokumentiert. Der nützlichere Weg ist, dass die Dimension auf der Buchungszeile selbst mitreist, als benannte Kategorie, auf den Systemen, deren Feldliste sie dokumentiert. So oder so ist es eine Antwort je System, und das ist ein besserer Satz vor einem Kunden als eine Zusicherung.

Wie viele Daten ziehen wir, und wie oft?

Ein Modell, das Historie will, will viele Buchungen, das ist also eine Mengenfrage, bevor es eine Frage der Frische ist. Lesezugriffe sind paginiert und filterbar, ein stückweiser Abzug nach dem Änderungszeitstempel hält eine Auffrischung im Verhältnis zu dem, was sich geändert hat, und ein System beantwortet einen Hauptbuch-Lesezugriff als asynchrone Aufgabe, die Sie abfragen, statt als Antwort, auf die Sie warten. Diese drei Dinge machen einen nächtlichen Neuaufbau praktikabel statt heldenhaft.

Speichert oder modelliert Maesn die Finanzdaten unserer Kunden?

Nein. Anfragen werden an das Zielsystem durchgereicht, und die Antwort wird auf dem Rückweg normalisiert, hier liegt also keine Kopie des Hauptbuchs, die veralten oder abfließen könnte. Das heißt zugleich, dass die Modellierung, die Verdichtung und die Planung selbst alle in Ihrem Produkt bleiben, und dorthin gehört die Unterscheidbarkeit.

Einmal bauen, auf der Unified API.

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