preKonto

Dokumentation

Wie aus einer Eingangsrechnung eine Vorkontierung wird, die man verantworten kann — und daraus nach Kontrolle und Freigabe eine Kontierung im Stapel: welche Stammdaten es braucht, wie der Lieferant und das Gegenkonto gefunden werden, wann preKonto selbst entscheidet und wann nicht — und was beim Korrigieren gelernt wird. Geschrieben für Menschen, die die Buchung am Ende unterschreiben.

Zwei Wörter, ein Unterschied. Eine Vorkontierung ist der Vorschlag von preKonto: Konten, Steuerschlüssel und Belegfelder, dazu die Prüfergebnisse und die Ampel. Eine Kontierung ist das, was nach Kontrolle und Freigabe durch die Buchhaltung in den Buchungsstapel geht. Der Übergang ist die Ampel aus Abschnitt 6: Sichere Fälle sind ohne Einzelfreigabe exportfertig, unsichere landen auf der Prüfliste. Die fachliche Verantwortung für den Stapel bleibt in beiden Fällen bei der Buchhaltung.

Der Ablauf im Überblick

Stammdaten hinterlegen
Kreditorenliste und Gegenkontenliste je Mandant. Einmalig, danach nur noch bei Änderungen. Ohne Gegenkontenliste kann nicht kontiert werden — sie ist die Auswahl, aus der überhaupt gewählt werden darf.
Beleg einreichen
PDF, Scan, XRechnung-XML oder ZUGFeRD — von dem, der die Rechnung bekommt, nicht zwingend von der Buchhaltung. Über die Oberfläche, die API oder den MCP-Server.
Vorkontierung entsteht
Rechnungsdaten auslesen, Kreditor zuordnen, Gegenkonto bestimmen, Buchungssatz bilden — und alles nachrechnen, was nachrechenbar ist.
Kontrollieren und freigeben
Die Ampel entscheidet, ob ein Mensch hinsehen muss. Was auf review steht, wird von der Buchhaltung bestätigt oder korrigiert; was auf auto steht, hat alle blockierenden Prüfungen bestanden und ist ohne Einzelfreigabe exportfertig.
Exportieren
DATEV-Buchungsstapel im EXTF-Format für den Zeitraum ziehen und in DATEV einlesen. Die Buchung selbst macht die Kanzlei.
Was preKonto nicht ist. Keine Buchhaltungssoftware — gebucht wird weiterhin in DATEV. Kein Ersatz für die Kontrolle durch die Buchhaltung und keiner für den Steuerberater: Eine Vorkontierung ist ein Vorschlag, die fachliche Verantwortung bleibt bei dem, der den Stapel freigibt und importiert. Und preKonto bucht nichts selbst in DATEV ein: Es erzeugt einen Stapel, den die Kanzlei importiert — mit Festschreibung 0, also weiterhin korrigierbar.

1. Mandant und DATEV-Kopfdaten

Ein Mandant ist eine Firma, für die kontiert wird. In einer Kanzlei sind das die Mandanten, in einem Unternehmen mit eigener Buchhaltung meist genau einer. Alles ist mandantenbezogen: Stammdaten, Belege, Buchungssätze, Regeln und Anweisungen, Exporte.

Beim Anlegen werden fünf Angaben verlangt, die alle im Kopf des DATEV-Buchungsstapels landen. Sie sind keine Formalität — mit falschen Kopfdaten importiert DATEV den Stapel entweder nicht oder in den falschen Mandanten.

Die Kopfdaten eines Mandanten samt der Wertebereiche, die geprüft werden.
AngabeErlaubtWofür sie gebraucht wird
Beraternummer1001 bis 9999999Identifiziert die Kanzlei bzw. den DATEV-Zugang. Steht im Header und muss zum Ziel-Bestand passen.
Mandantennummer1 bis 99999Identifiziert den Mandanten innerhalb dieser Beraternummer.
WirtschaftsjahresbeginnKalendertagGrenze jedes Buchungsstapels. Das Belegdatum trägt im EXTF-Format kein Jahr — DATEV leitet es aus dem Kopf ab.
Sachkontenlänge4 bis 8Wie viele Stellen die Sachkonten haben. Bestimmt gleichzeitig die Länge der Personenkonten: die ist immer eine Stelle mehr.
KontenrahmenSKR03 oder SKR04SKR03 gliedert nach Prozessen, SKR04 nach dem Abschluss. Geht in den Kopf und in den Kontierungs-Prompt.
Die Sachkontenlänge ist der häufigste Stolperstein. Bei vierstelligen Sachkonten (4930) sind die Personenkonten fünfstellig (70023). Wer sie falsch setzt, bekommt keine halb richtigen Ergebnisse, sondern eine harte Ablehnung: Die Kontolänge ist eine deterministische Prüfung, sie blockiert die automatische Buchung und verhindert den Export.

Das Wirtschaftsjahr reicht vom hinterlegten Beginn ein Jahr minus einen Tag. Ein Stapel darf diese Grenze nicht überschreiten — deshalb wird pro Periode exportiert, nicht über den Jahreswechsel hinweg. Warum das so sein muss, steht in der Export-Dokumentation.

Es gibt zwei Wege zum Mandanten, und sie sind gleichrangig: das Formular in der Oberfläche, oder die KRExport_MNDT_…-Datei aus DATEV. In beiden Fällen entsteht kein Mandant, ohne dass ein Mensch die Angaben gesehen und bestätigt hat — die Datei liefert einen Vorschlag. Wie der Weg über die Datei aussieht, steht im Erstimport aus der Mandantenliste.

2. Stammdaten hochladen

Zwei Listen je Mandant. An ihnen hängt, wie gut die Vorschläge von Anfang an sind: Steht in der Kreditorenliste schon ein Standard-Gegenkonto, ist die Hauskontierung des Mandanten ab dem ersten Beleg bekannt und muss nicht erraten werden.

ListeWas drinstehtPflichtfelder
KreditorenDie Lieferanten als Personenkonten — mit USt-IdNr., IBAN und, wenn vorhanden, dem Standard-Gegenkonto (der Hauskontierung).kontoNr, name
GegenkontenDie Sachkonten, auf die gebucht werden darf, mit Bezeichnung, erwartetem Steuersatz und dem Kennzeichen „Automatikkonto“.kontoNr, bezeichnung

Optional sind bei Kreditoren ustId, iban und defaultGegenkonto, bei Gegenkonten steuersatzHinweis, erwarteterSteuersatz und automatikkonto. Jedes optionale Feld, das vorhanden ist, macht die Zuordnung sicherer — die USt-IdNr. ist die stärkste Stufe der Matching-Kaskade, und ein Standard-Gegenkonto erspart den Umweg über ein Sprachmodell vollständig.

DATEV-KRexport: ohne KI erkannt

Wer aus DATEV heraus exportiert, bekommt Dateien, deren Aufbau bekannt ist. Solche Dateien werden deterministisch geparst — kein Sprachmodell, keine Heuristik, keine Vorschau nötig. Erkannt werden sie an zwei unabhängigen Merkmalen, eines genügt:

Widersprechen sich Dateiname und Kopfzeile, gewinnt die Kopfzeile, und der Widerspruch wird als Hinweis gemeldet — der Inhalt ist die verlässlichere Auskunft. Umbenennen schadet deshalb nicht: Eine KRexport-CSV mit unveränderter Kopfzeile wird auch als liste.csv deterministisch geparst. Der Dateiname ist der Rückfall, wenn die Kopfzeile nicht wiedererkannt wird, und liefert zusätzlich Mandantennummer und Wirtschaftsjahresbeginn — deshalb lohnt es trotzdem, den Originalnamen mitzugeben.

Erstimport: Mandanten aus der Mandantenliste

KRexport schreibt neben Konten- und Kreditorenliste eine dritte Datei: KRExport_MNDT_…. Sie führt Beraternummer, Mandantennummer, Wirtschaftsjahr und Namen aller Mandanten — und sonst nichts. Damit ist sie die einzige Liste, die Mandanten definiert, statt in einen hineinzuschreiben. Genau deshalb ist sie die einzige, die sich ohne vorhandenen Mandanten hochladen lässt: Auf /mandanten steht neben „Mandant anlegen“ der Weg „Mandantenliste aus DATEV hochladen“.

Der Ablauf: Datei hochladen → Liste aller enthaltenen Mandanten ansehen → anhaken, welche angelegt werden sollen → anlegen. Führt die Datei einen Mandanten mit mehreren Wirtschaftsjahren, wird trotzdem ein Mandant angelegt; das Jahr wählen Sie und können es später ändern. Mandanten, die es schon gibt, sind als „vorhanden“ markiert und werden nicht verändert — die Eindeutigkeit ist Beraternummer plus Mandantennummer, ein zweiter Durchlauf derselben Datei erzeugt also keine Dubletten.

Sachkontenlänge und Kontenrahmen stehen nicht in der Datei. Sie werden beim Anlegen abgefragt und gelten für alle Mandanten eines Durchlaufs gleich; Vorgabe ist 4 Stellen und SKR03. Beide Werte gehen in jeden Buchungsstapel ein und sind am Mandanten jederzeit änderbar — aber raten wäre hier das Falsche.

Der Sammelexport funktioniert genauso. Kanzleien mit vielen Mandanten unter einer Beraternummer exportieren nicht hundert Dateisätze von Hand, sondern lassen ein Skript über den Ausgabeordner von KRexport laufen: Es stellt Mandantennummer und Wirtschaftsjahresbeginn als Spalten vor jede Zeile und schreibt alle Mandanten einer Kategorie in eine Datei. Bei der Mandantenliste wird dabei nicht gefiltert — der Zweck der Datei ist, alle Mandanten zu zeigen. Bei Konten- und Kreditorenlisten schon: Dort werden die Zeilen des gewählten Mandanten genommen und in der Vorschau ausgewiesen, wie viele Zeilen zu anderen Mandanten oder anderen Wirtschaftsjahren gehören. Das ist eine Feststellung, kein Fehler.

Nach der Mandantenanlage fehlen den Mandanten noch ihre Konten. Der Weg dorthin steht direkt unter dem Ergebnis: je angelegtem Mandanten ein Link auf seine Upload-Seite, wo Kontenliste KRExport_KTO_… und Kreditorenliste KRExport_KRED_… aus demselben KRexport-Lauf hineingehören.

Headless geht derselbe Erstimport über POST /api/v1/mandanten/import — der einzige Endpunkt der API, der ohne Mandanten-ID arbeitet. Auch dort in zwei Schritten: Ein Aufruf ohne Auswahl liefert nur die Vorschlagsliste, erst ein Aufruf mit Auswahl legt an.

Eine Kreditoren- oder Gegenkontenliste ohne Mandanten wird dagegen abgewiesen, mit dem Hinweis, zuerst die Mandantenliste hochzuladen oder einen Mandanten anzulegen. Solche Listen brauchen ein Ziel; ein Konto ohne Mandanten ist kein halber Import, sondern keiner.

Beliebige Listen: KI-Spaltenmapping mit Vorschau

Nicht jede Liste kommt aus DATEV. Excel-Tabellen aus dem ERP, eine CSV-Datei aus einem Vorgängersystem, ein PDF-Ausdruck des Kontenplans — dafür ordnet ein Sprachmodell die Spalten den Zielfeldern zu. Wichtig ist, was es dabei nicht tut:

In der Oberfläche folgt darauf eine Vorschau: die erkannte Spaltenzuordnung, fünf fertig zugeordnete Beispielzeilen und der Probelauf-Fehlerbericht. Erst Ihre Bestätigung schreibt Daten — und die Bestätigung ruft kein Sprachmodell mehr auf, sie arbeitet mit dem Zwischenergebnis. Wer über die API importiert, bekommt keine Vorschau: Dort ist der Aufruf ausdrücklich die Anweisung „übernimm diese Liste“, und der Importbericht in der Antwort nennt hinterher, was übersprungen wurde.

FormatUnterstütztAnmerkung
CSV / TextjaTrennzeichen (; Tab , |) und Kodierung werden erkannt; bei geratener Kodierung erscheint ein Hinweis, die Umlaute in der Vorschau zu prüfen.
.xlsxjaEs wird ein Blatt gelesen — das erste mit genug Zeilen und Spalten, sonst das größte. Der Blattname steht in der Vorschau.
.xls (altes Format)neinVorher in .xlsx umspeichern.
PDFjaWird per Sprachmodell in eine Tabelle übertragen und läuft danach durch dasselbe Mapping.
XRechnung / ZUGFeRDneinDas sind Rechnungsformate, keine Stammdatenlisten — sie werden abgewiesen.

Was ein Upload niemals tut

Übernommen wird per Upsert über Mandant und Kontonummer. Drei Fälle, und der dritte ist der wichtige:

Und: Ein Upload löscht nie. Konten, die in der neuen Liste fehlen, bleiben stehen. Kommt eine Kontonummer in der Datei mehrfach vor, gilt das erste Vorkommen; die übrigen werden gemeldet. Ein unbrauchbares Pflichtfeld lässt die Zeile ausfallen, ein unbrauchbares optionales Feld lässt die Zeile durch und bleibt leer. Kein einzelner Fehler bricht den ganzen Import ab.

3. Belegverarbeitung: XML zuerst, KI nur wenn nötig

Was mit einem Beleg passiert, entscheidet sein Inhalt — nicht der Dateiname und nicht der Content-Type. Bei einem PDF wird wirklich in den Anhangsbaum geschaut, ob eine Rechnungs-XML eingebettet ist.

XML gewinnt immer, wenn es eines gibt. Ein strukturiertes Feld ist keine Vermutung.
EingangWegSprachmodell beteiligt?
XRechnung (UBL oder CII)XML wird geparst: Beträge, Steuersätze, USt-IdNr., IBAN, Rechnungsnummer stehen als Felder da.nein
ZUGFeRD / Factur-X (PDF mit XML)Die eingebettete XML wird geparst, nicht das PDF-Bild.nein
PDF oder Scan ohne XMLDer Sichtbeleg wird von einem Sprachmodell ausgelesen.ja

Der Grund ist nicht Sparsamkeit, sondern Genauigkeit: Bei einer XRechnung steht der Betrag als Zahl in einem benannten Feld. Da gibt es nichts zu erkennen und nichts zu verwechseln. Der Anteil dieser Belege wächst von allein, und mit ihm verschiebt sich die Arbeit von der Erkennung zur Kontierung.

Erkannt und benannt werden die ZUGFeRD-Profile MINIMUM, BASIC-WL, BASIC, EN16931, EXTENDED und XRECHNUNG.

Ein Sonderfall mit Kreuzprobe. In den Profilen MINIMUM und BASIC-WL dürfen Positionen und Steueraufschlüsselung fehlen. Dann — und nur dann — wird der Sichtbeleg zusätzlich ausgelesen. Weichen XML und Sichtbeleg im Endbetrag voneinander ab, darf niemand automatisch buchen; der Beleg geht in die Prüfung. Scheitert dieser Zusatzschritt (kein KI-Zugang, Überlast), bleiben die XML-Kopfdaten gültig und der Beleg geht mit Hinweis in die Prüfung — er fällt nicht auf „Fehler“.

Was danach nachgerechnet wird, ist unabhängig von der Quelle: Netto plus Umsatzsteuer gegen Brutto und die Summe der Positionen gegen Netto, jeweils auf den Cent. Prüfziffer der USt-IdNr., Prüfsumme der IBAN nach mod 97, kalendarische Gültigkeit des Rechnungsdatums, Vorhandensein der Rechnungsnummer.

Optional kommt eine zweite, unabhängige Meinung hinzu: Ist ein Zugang zum Prüfdienst finisma konfiguriert, wird ein ZUGFeRD-PDF dort gegen EN 16931 geprüft. Das Ergebnis erscheint als eigener Prüfpunkt en16931_valide. Ein „ungültig“ ist ein Blocker und schickt den Beleg in die Prüfung — es bricht die Verarbeitung aber nie ab, und ein nicht gelaufener Check erscheint ausdrücklich nicht als bestandener. Ohne Zugang läuft alles unverändert weiter, der Punkt fehlt dann einfach. Was dabei übertragen wird und an wen, steht in den häufigen Fragen.

4. Kreditor finden: die Matching-Kaskade

Der Lieferant auf der Rechnung muss einem Personenkonto Ihrer Kreditorenliste zugeordnet werden. Vier Stufen, absteigend nach Beweiskraft. Die erste, die trifft, gewinnt.

StufeGrundlageConfidenceWo sie bricht
1. USt-IdNr.Umsatzsteuer-Identifikationsnummer des Verkäufers, normalisiert und mit Formatprüfung0,98Konzerne führen mehrere Gesellschaften unter einer Nummer. Passt sie auf zwei Kreditoren, ist der Treffer nicht eindeutig.
2. IBANIBAN der Rechnung gegen die im Stammsatz hinterlegten IBANs, Prüfsumme mod 970,95Zahlungsdienstleister und Factoring: Auf der Rechnung steht die IBAN des Dienstleisters. Die gehört nicht in den Stammsatz.
3. Name exaktNormalisierter Firmenname, identisch zum Stammsatz (Rechtsform und Schreibweise geglättet)0,90Zwei Gesellschaften mit demselben normalisierten Namen. Dann ist der Treffer nicht eindeutig und beide gehen in die Prüfung.
4. NamensähnlichkeitÄhnlichkeitsmaß über den Namen, Schwelle 0,90höchstens 0,80Der Deckel liegt unter der Auto-Schwelle — ein Ähnlichkeitstreffer bucht nie durch. Normalformen unter vier Zeichen gehen gar nicht erst in diese Stufe: „ABC“ und „ABD“ sind zu 0,83 ähnlich und haben nichts miteinander zu tun.

Zwei Regeln stehen über der Kaskade.

Ein ungültiger Schlüssel wird nicht verglichen. Vor Stufe 1 und 2 werden Prüfziffer bzw. Prüfsumme geprüft. Eine falsch gelesene USt-IdNr. könnte zufällig zu einem fremden Kreditor passen — und würde die Rechnung mit der höchsten Confidence der ganzen Kaskade auf ein falsches Konto buchen. Die Stufe wird deshalb übersprungen und nicht bloß schwächer bewertet.

Mehrdeutigkeit wird nie geraten. Passen zwei Kreditoren gleich gut — bei Ähnlichkeitswerten heißt „gleich gut“: sie liegen weniger als 0,01 auseinander — ist das Ergebnis „Prüfung“ mit beiden Kandidaten, nicht der erste in der Liste. Wird kein Kreditor gefunden, bekommt die Prüfliste bis zu drei Beinah-Treffer als unverbindliche Vorschläge.

Unbekannte Kreditoren werden niemals automatisch angelegt. Ein neuer Lieferant ist eine Entscheidung über Ihren Kontenplan, nicht ein Nebeneffekt eines Belegs. Der Beleg geht in die Prüfung, und dort wird der Kreditor zugeordnet — oder erst einmal in den Stammdaten angelegt.

5. Gegenkonto finden: drei Schichten

Das Gegenkonto — das Sachkonto für den Aufwand — steht nicht auf der Rechnung. Dass ein Lieferant in diesem Betrieb auf 4930 gebucht wird und nicht auf 4980, ist eine Konvention des Mandanten. Drei Schichten, von der stärksten zur schwächsten Aussage:

SchichtWoherConfidenceBraucht ein Sprachmodell?
a) Regeln und AnweisungenWas der Mandant selbst festgelegt hat — beides legen Sie unter „Regeln und Anweisungen“ an. Eine strukturierte Regel (Bedingung → Konto) greift deterministisch und darf ohne Prüfung buchen. Eine Freitext-Anweisung wirkt über den Prompt und damit innerhalb von Schicht (c), also unter dem Deckel von 0,84.0,95 (strukturierte Regel)nein (strukturierte Regeln); ja, wenn nur eine Freitext-Anweisung vorliegt
b) Kreditor-DefaultDie Hauskontierung dieses Lieferanten — aus dem Stammdaten-Upload oder gelernt.0,90nein
c) SprachmodellNur wenn a und b nichts hergeben. Das Modell wählt aus der Gegenkontenliste des Mandanten.höchstens 0,84ja

Schicht (b) ist der wirtschaftliche Hebel: Greift das Kreditor-Default, wird gar kein Modell gefragt. Das senkt die Kosten je Beleg und macht die Ergebnisse stabil — derselbe Lieferant bekommt immer dasselbe Konto. Eine aktive Freitext-Anweisung schaltet diese Abkürzung ab: Solange eine Anweisung im Spiel ist, darf das Default nicht stillschweigend gewinnen, denn genau das könnte die Anweisung ja umstoßen wollen.

Für Schicht (c) ist entscheidend, wie gefragt wird. Das Modell bekommt die Gegenkontenliste des Mandanten als abgeschlossene Auswahl — technisch ein Enum im Antwortschema — und danach prüft ein deterministischer Check die Antwort noch einmal gegen dieselbe Liste. Ein Konto außerhalb der Liste führt nie zu einer Buchung, sondern in die Prüfung. Eine erfundene Kontonummer kann also nicht in einem Stapel landen.

Und der Deckel bei 0,84 ist mit Bedacht knapp unter der Auto-Schwelle von 0,85 gesetzt. Die Begründung ist eine sicherheitstechnische: Der Beleg gehört dem Absender. Freitextfelder — Notizen, Positionsbezeichnungen, Verwendungszweck — stehen wörtlich im Prompt. Wer sie füllt, könnte darin Anweisungen unterbringen und damit beides steuern: das vorgeschlagene Konto und die gemeldete Sicherheit. Läge der Deckel über der Schwelle, wäre die menschliche Prüfung durch einen präparierten Beleg abschaltbar. Ein Modell, das „1,0“ meldet, hat damit nichts bewiesen.

Strukturierte Regel (0,95) und Kreditor-Default (0,90) bleiben dagegen auto-fähig: Beide entstehen aus Ihren eigenen Daten und wirken deterministisch, ohne dass Belegtext ihre Höhe beeinflussen könnte.

Regel oder Anweisung — der Unterschied in zwei Sätzen. Eine Regel ist Bedingung und Ergebnis („dieser Kreditor“ oder „Belegtext enthält …“ → dieses Konto); sie wird ohne Sprachmodell ausgewertet, liegt bei 0,95 und darf deshalb ohne Prüfung buchen. Eine Anweisung ist ein Satz in normalem Deutsch; sie ändert nicht die Confidence, sondern die Frage an das Modell, wirkt damit innerhalb von Schicht (c) und bleibt unter dem Deckel von 0,84 — ein Beleg, dessen Konto aus einer Anweisung folgt, geht deshalb immer einmal durch die Prüfung.
Daraus folgt die Wahl: Was sich als Bedingung ausdrücken lässt, gehört als Regel hinterlegt — nur das spart den Klick. Alles, was einen ganzen Satz braucht, gehört als Anweisung hinterlegt. Beides verwalten Sie unter Regeln und Anweisungen; Regeln entstehen außerdem direkt aus einer Korrektur in der Prüfung — dort wird nach der Änderung des Gegenkontos angeboten, sie festzuschreiben. Von selbst passiert das nie, und die Prüfansicht nennt später, welche Regel eine Buchung ausgelöst hat.

Passen mehrere Regeln auf einen Beleg, ist die Auswahl festgelegt und nachvollziehbar: Die spezifischere gewinnt — Kreditor und Belegtext vor nur Kreditor, nur Kreditor vor nur Belegtext —, bei Gleichstand die ältere. So muss eine allgemeine Regel nicht gelöscht werden, damit eine Ausnahme greift, und eine neu angelegte Regel stößt eine bestehende, gleich spezifische nicht stillschweigend um. Eine Regel ohne Bedingung ist nicht anlegbar: Sie würde jeden Beleg des Mandanten ohne Prüfung auf ein Konto buchen. Betragsgrenzen und Datumsbedingungen gibt es nicht — die Bedingung ist ein Kreditor, eine Liste von Begriffen oder beides.

Trägt ein Gegenkonto das Kennzeichen Automatikkonto, ist der Steuerschlüssel darin schon enthalten — dann darf kein BU-Schlüssel gesetzt sein. Ein Widerspruch wird beim Bestätigen und beim Export abgewiesen, nicht stillschweigend geglättet.

6. Von der Vorkontierung zur Kontierung: die Ampel

Bis hierher ist alles Vorkontierung: ein Vorschlag mit Konten, Steuerschlüssel und Belegfeldern. Ob daraus eine Kontierung wird — also etwas, das in den Buchungsstapel geht —, entscheidet die Ampel. Und dahinter steht die Regel, die das Verhältnis von KI und Verantwortung bestimmt: Die Selbsteinschätzung eines Sprachmodells allein setzt einen Buchungssatz nie auf „automatisch“. Ein Modell ist bei einer falsch gelesenen Zahl genauso überzeugt wie bei einer richtigen. Über „automatisch“ entscheiden ausschließlich nachrechenbare Prüfungen.

Die Ampel

StatusWas er heißtKommt in den Export?
autoAlle blockierenden Prüfungen sind grün und die Gesamtconfidence liegt bei mindestens 0,85. Ein Mensch muss nicht hinsehen.ja
reviewMindestens eine blockierende Prüfung ist offen oder die Confidence liegt unter der Schwelle. Braucht eine menschliche Entscheidung.nein
bestaetigtEin Mensch hat den Satz freigegeben — bestätigt oder korrigiert und bestätigt.ja

Die Gesamtconfidence ist das Minimum der bewerteten Einzelfelder, nicht ihr Durchschnitt. Ein Durchschnitt würde ein einzelnes unsicheres Feld hinter acht sicheren verstecken — genau der Fall, den die Prüfung abfangen soll.

Nicht jeder Satz wird einzeln angeklickt — und das ist Absicht. Ein Satz auf auto geht ohne Einzelfreigabe in den Stapel: Er hat alle blockierenden Prüfungen bestanden, und die Confidence liegt über der Schwelle. Zur Kontrolle vorgelegt wird, was unsicher ist. Das entlastet die Buchhaltung von der Masse, nimmt ihr aber die Verantwortung nicht ab: Der Stapel wird als Ganzes gezogen, geprüft und importiert, und wer ihn importiert, steht für ihn gerade. Wer jeden Satz sehen will, filtert die Liste nicht auf review, sondern sieht sie vollständig durch — jede Vorkontierung bleibt mit ihren Prüfergebnissen und ihrer Confidence nachlesbar.

Die Prüfungen

Ein Prüfergebnis hat eine Schwere: blocker verhindert „automatisch“, hinweis wird nur angezeigt. Die Schwere hängt am konkreten Ergebnis, nicht am Namen der Prüfung — eine fehlende IBAN ist ein Hinweis, eine vorhandene mit falscher Prüfsumme ein Blocker. Das ist der Unterschied zwischen „steht nicht drauf“ und „ist falsch“.

Die geschlossene Liste der Prüfungen. Nach diesen Namen lässt sich die Prüfliste filtern.
PrüfungFrage
summenNetto + Umsatzsteuer = Brutto, und Summe der Positionen = Netto — auf den Cent.
ust_idPrüfziffer und Format der USt-IdNr. des Verkäufers.
ibanIBAN-Prüfsumme nach mod 97.
belegdatumRechnungsdatum vorhanden, plausibel und kalendarisch gültig.
rechnungsnummerRechnungsnummer vorhanden — Belegfeld 1 ist für die offene-Posten-Verwaltung Pflicht.
kreditor_eindeutigGenau ein Kreditor der Mandantenliste getroffen?
gegenkonto_bekanntSteht das vorgeschlagene Gegenkonto in der Gegenkontenliste?
kontolaengePasst die Stellenzahl zur Sachkontenlänge des Mandanten?
steuersatz_plausibelPasst der Steuersatz der Rechnung zu Gegenkonto und BU-Schlüssel?
wirtschaftsjahrLiegt das Belegdatum im Wirtschaftsjahr des Stapels?
en16931_valideUrteil des externen Prüfdienstes. Erscheint nur, wenn er tatsächlich gelaufen ist.

Warum ein KI-Vorschlag immer in die Prüfung geht

Weil die Obergrenzen es erzwingen. Ein Gegenkonto aus dem Sprachmodell trägt höchstens 0,84, ein Kreditor aus der Namensähnlichkeit höchstens 0,80 — beide unter der Schwelle von 0,85. Und weil die Gesamtconfidence das Minimum ist, zieht ein solches Feld den ganzen Satz unter die Schwelle. Das ist keine Einstellung, die man versehentlich verschiebt: Der Vorschlag kann seine eigene Bewertung nicht anheben, weil die Grenze nach der Antwort angewendet wird.

Der praktische Nebeneffekt: Der Aufwand fällt einmal je Lieferant an, nicht einmal je Beleg. Nach der ersten Prüfung ist die Zuordnung bekannt, und der nächste Beleg desselben Lieferanten läuft über Schicht (b) — deterministisch und auto-fähig.

7. Korrigieren und Lernen

In der Prüfliste stehen die Sätze, die eine Entscheidung brauchen — mit der Begründung, warum. Zwei Handlungen:

Der Unterschied wird festgehalten, und zwar aus einem handfesten Grund: Er ist die einzige ehrliche Grundlage für die Frage, wie gut die Automatik wirklich arbeitet. Eine Oberfläche, die beides über einen Knopf abbildet, macht die Fälle im Nachhinein ununterscheidbar. Deshalb sind Korrigieren und Freigeben in der Oberfläche auch zwei Schritte: Wer etwas geändert hat, soll die Änderung noch einmal ansehen.

Nicht korrigierbar sind Betrag und Belegdatum. Sie stehen so auf der Rechnung. Stimmt der Betrag nicht, ist die Extraktion falsch, und die Antwort darauf ist ein neuer Verarbeitungslauf — nicht ein überschriebener Wert, der nirgends mehr mit dem Beleg übereinstimmt.

Was gelernt wird

Bewusst simpel und erklärbar: kein Training, kein zweites Modell, keine Statistik, die niemand nachvollziehen kann. Zwei Mechanismen, die man in einem Satz versteht.

1. Das Kreditor-Default. Tragen die letzten zwei bestätigten Buchungssätze eines Kreditors dasselbe Gegenkonto und weicht es vom bisherigen Default ab, wird das Default nachgezogen und als gelernt gekennzeichnet.

Warum erst ab der zweiten konsistenten Korrektur? Eine einzelne Korrektur ist oft belegspezifisch — „diesmal war es eine Anlage, nicht Aufwand“. Würde sie schon das Default setzen, würde die Automatik nach jeder Ausnahme umschwenken, und Sie müssten gegen Ihr eigenes System anarbeiten. Zwei gleiche Entscheidungen hintereinander sind dagegen ein Muster.

2. Beispiele im Prompt. Bestätigte Sätze desselben Kreditors — sonst die mit dem ähnlichsten Belegtext — gehen als Beispiele in die Kontierung: höchstens zehn insgesamt, höchstens fünf davon vom gleichen Kreditor. So sieht das Modell Ihre Konvention, statt sie zu erraten.

Lernsignale sind ausschließlich bestätigte Sätze. Ein Entwurf in der Prüfliste sagt nichts, solange ihn niemand freigegeben hat. Und beide Mechanismen ändern nur das, was ein Mensch mit einer Freigabe bestätigt hat — Sie können jedes gelernte Default in den Stammdaten von Hand überschreiben, und ein solcher Eintrag wird von späteren Uploads nicht wieder plattgemacht.

8. Regeln und Anweisungen: nachschärfen ohne Programmieren

Manche Konventionen kann man aus keiner Historie ablesen und in keine Kontenliste schreiben. Dafür gibt es zwei Werkzeuge, und beide stehen auf derselben Seite — Regeln und Anweisungen —, weil die Wahl zwischen ihnen dort fällt.

Regeln: Bedingung → Konto, ohne Sprachmodell

Eine Regel hat eine Bedingung und ein Ergebnis. Die Bedingung ist ein Kreditor, eine Liste von Begriffen im Belegtext — einer davon muss vorkommen — oder beides. Das Ergebnis ist ein Gegenkonto und wahlweise ein BU-Schlüssel. Sie wird ohne KI ausgewertet, greift mit 0,95 und darf deshalb ohne Prüfung buchen.

Kreditor 70088 und Belegtext enthält „Porto“   →  4910
Belegtext enthält „Reinigung“                  →  4250
EigenschaftRegel
BedingungKreditor, Begriffe im Belegtext oder beides. Mindestens eine ist Pflicht — eine Regel ohne Bedingung würde jeden Beleg des Mandanten ohne Prüfung auf ein Konto buchen und ist deshalb nicht anlegbar.
Was es NICHT gibtKeine Betragsgrenzen, keine Datumsbedingungen, keine Verknüpfung mehrerer Begriffe mit „und“. Was hier nicht steht, wird auch nicht ausgewertet.
VorrangDie spezifischere Regel gewinnt: Kreditor und Belegtext vor nur Kreditor, nur Kreditor vor nur Belegtext. Bei Gleichstand die ältere. So muss keine allgemeine Regel gelöscht werden, damit eine Ausnahme greift.
AnlegenAuf der Seite „Regeln und Anweisungen“, über die REST-API — oder direkt aus einer Korrektur in der Prüfung: Nach einer Änderung des Gegenkontos wird angeboten, sie festzuschreiben. Von selbst entsteht nie eine Regel.
Unbekanntes KontoZeigt eine Regel auf ein Konto, das der Mandant nicht (mehr) führt, wird der Beleg sichtbar zur Prüfung gelegt — nicht stillschweigend anders gebucht. Beim Anlegen wird ein solches Konto abgewiesen.
AbschaltenDeaktivieren ist der vorgesehene Weg: Die Regel bleibt lesbar und wirkt nicht mehr — so bleibt nachvollziehbar, unter welcher Regel ein alter Buchungssatz entstand. Endgültiges Löschen ist möglich, hinter einer Rückfrage.
Anzahlhöchstens 200 je Mandant

Bei einer automatisch gebuchten Zeile nennt die Prüfansicht, WELCHE Regel entschieden hat und WELCHE Bedingung gegriffen hat — „welche Regel hat gewonnen“ ist die Frage, die ein Buchhalter stellt, wenn ein Ergebnis ihn überrascht, und sie muss beantwortbar sein, ohne eine Liste zu durchsuchen.

Anweisungen: Sätze in normalem Deutsch, immer mit Prüfung

Für alles, was sich nicht in Bedingung und Ergebnis fassen lässt, gibt es Anweisungen: Freitext-Regeln je Mandant, in normalen Sätzen.

Wenn es eine Reisekostenabrechnung ist, muss immer die Person
auf der ersten Seite als Kreditor eingetragen werden.

Das Beispiel ist der Musterfall, weil es ein Problem löst, an dem sonst jede Automatik scheitert. Auf einer Reisekostenabrechnung stehen viele Firmennamen — Hotel, Bahn, Restaurant. Der Kreditor ist aber keiner davon, sondern der Mitarbeiter, der die Auslagen ersetzt bekommt. Es gibt kein Merkmal auf dem Beleg, aus dem sich diese Konvention ableiten ließe; sie muss jemand hinschreiben. Danach gilt sie für jeden solchen Beleg dieses Mandanten.

EigenschaftRegel
GeltungsbereichExtraktion, Kontierung oder beides — wählbar je Anweisung.
VorrangAnweisungen stehen am Ende des Prompts und gehen den allgemeinen Vorgaben vor, wo sie ihnen widersprechen. Eine aktive Anweisung schaltet außerdem die Abkürzung über das Kreditor-Standardkonto ab — nicht aber die strukturierten Regeln: Die schwächere Festlegung darf die stärkere nicht entwerten.
ConfidenceKeine eigene. Eine Anweisung ändert die Frage an das Modell, wirkt damit in Schicht (c) und bleibt unter dem Deckel von 0,84 — ein Beleg, dessen Konto aus ihr folgt, geht immer einmal durch die Prüfung.
Längehöchstens 2000 Zeichen je Anweisung
Anzahlhöchstens 100 je Mandant
AbschaltenDeaktivieren ist der vorgesehene Weg: Die Regel bleibt gespeichert und wirkt nicht mehr — so bleibt nachvollziehbar, unter welcher Regel ein alter Buchungssatz entstand. Endgültiges Löschen ist möglich, aber ein eigener Schritt hinter einer Rückfrage.
Anweisungen kommen nur aus der Mandantenkonfiguration. Niemals aus einem hochgeladenen Dokument. Text auf einer Rechnung als Anweisung zu behandeln, wäre eine offene Tür: Wer die Rechnung schreibt, könnte damit Ihre Kontierung steuern. Deshalb ist die Grenze architektonisch und nicht eine Frage der Formulierung — und deshalb liegt die Obergrenze für einen KI-Vorschlag unter der Auto-Schwelle.

Eine gute Anweisung nennt eine Bedingung und eine Folge und ist so knapp wie möglich. Je Beleg wird protokolliert, wie viele Anweisungen wirksam waren — bei einem überraschenden Vorschlag ist das der erste Ort, an dem man nachsieht.

Und die Faustregel für die Wahl: Lässt sich der Fall als Bedingung aufschreiben, nehmen Sie eine Regel — nur die spart den Klick. Braucht er einen ganzen Satz, nehmen Sie eine Anweisung — sie spart das Nachdenken, nicht den Klick.

9. Export nach DATEV

Am Ende steht eine Datei: ein DATEV-Buchungsstapel im EXTF-Format für einen Zeitraum. Enthalten sind alle Sätze mit Status auto und bestaetigt; alles auf review bleibt liegen.

Vor dem Schreiben läuft die strengste Prüfung der ganzen Kette — Kontolängen des Mandanten, Gegenkonto in der Kontenliste, „Automatikkonto ⇒ kein BU-Schlüssel“, Wirtschaftsjahr-Grenze. Der Grund ist einfach: Was hier durchgeht, merkt vor dem DATEV-Import niemand mehr.

Festschreibung bleibt ausnahmslos 0. Ein festgeschriebener Stapel ist in DATEV nicht mehr korrigierbar; diese Entscheidung gehört dem Steuerberater und nicht einem Export. Deshalb ist es eine Konstante und keine Option.

Das EXTF-Format hat eigene Fallstricke — Feldpositionen, ein Belegdatum ohne Jahr, ISO-8859-1 statt UTF-8.

Weiter zur Export-Dokumentation →

Weiterlesen

  • DATEV-Export — EXTF-Format, Feldlängen, GoBD und Festschreibung.
  • API-Referenz — derselbe Ablauf programmgesteuert.
  • MCP-Server — derselbe Ablauf im KI-Chat.
  • Häufige Fragen — Abgrenzung, Datenschutz, Haftung.
  • Blog — Hintergründe zu Matching, Gegenkonten und EXTF.