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.
- Die BuchungenjournalEntries
- Die Forderungeninvoices
- Der Kontenrahmenaccounts
Aus der Dokumentation je System gelesen und nicht aus einer Zusammenfassung.
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.
Verdichtungen, die das Buchhaltungssystem bereits gerechnet hat.
Belege und Stammdaten, aus denen die Verdichtungen bestehen.
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.
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.
- transactionDateWann sie gebucht wurde
- descriptionWofür sie war
- journalTypeIn welchem Journal sie sitzt
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.
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.
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.
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.
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.
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.
- 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.
Ein Finanzprodukt läuft bereits auf dieser Anbindung

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.
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.
| Was Sie brauchen | Heute | Auf Anfrage | System kann es nicht |
|---|---|---|---|
| Die Buchungen selbst | 11 | 11 | 7 |
| Forderungen und ihre Fälligkeiten | 13 | 14 | 2 |
| Verbindlichkeiten und ihre Fälligkeiten | 8 | 17 | 4 |
| Der Kontenrahmen | 19 | 8 | 2 |
| Die Sätze hinter den Zahlen | 12 | 14 | 3 |
| Der Saldo je Konto | 2 | 8 | 19 |
| Was noch offen ist | 2 | 23 | 4 |
| Bankaktivität | 0 | 21 | 8 |
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.
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.
- Buchungen mit Seite und Betrag
- Rechnungen und Eingangsrechnungen mit Daten
- Der Kontenrahmen und die Sätze
- Paginierte, stückweise Lesezugriffe
- 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.
Häufige Fragen
Können wir eine Gewinn- und Verlustrechnung oder eine Bilanz ziehen?
Welche Systeme geben eine Summen- und Saldenliste zurück?
Sind die Daten in Echtzeit?
Können wir für eine Liquiditätsposition Banktransaktionen lesen?
Wie bauen wir eine Fälligkeitsstruktur ohne einen Endpunkt dafür?
Was ist hier der Unterschied zwischen Auswertung und Planung?
Kommt eine Buchung immer mit Beträgen zurück?
Können wir eine Planung nach Kostenstelle oder Abteilung segmentieren?
Wie viele Daten ziehen wir, und wie oft?
Speichert oder modelliert Maesn die Finanzdaten unserer Kunden?
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.










