QBO-Dateien: INTU.BID, FITID und warum Importe scheitern

Eine .qbo-Datei ist OFX 1.02 mit zwei aufgesetzten Intuit-Eigenheiten. Genau diese beiden verursachen die zwei Beschwerden, die Menschen wirklich haben. Alles Folgende ist aus dem Exporter dieses Konverters gelesen, src/export/qbo.ts — nicht von der Werbeseite eines anderen Konverters.

QuickBooks beschriftet meinen Import mit der falschen Bank

Wegen einer einzigen Zahl. Eine .qbo-Datei trägt ein Element <INTU.BID>, und QuickBooks prüft es gegen Intuits Verzeichnis der Banken mit Web-Connect-Vereinbarung. Eine beliebige ID wird abgelehnt, deshalb liefert jeder Konverter eine registrierte als Vorgabe aus — und die übliche Vorgabe, 3000, gehört Wells Fargo. Darum kann ein Chase-Auszug unter einem Wells-Fargo-Etikett landen.

Es ist kosmetisch. Die ID entscheidet über Name und Logo des Instituts, die beim Import angezeigt werden. Sie entscheidet nicht, wohin die Buchungen laufen — das echte QuickBooks-Konto wählen Sie weiterhin im Importdialog. Eine falsch beschriftete Datei ist verwirrend, nicht falsch.

Dieser Konverter nutzt 3000 aus demselben Grund wie alle, sagt es auf der Seite statt es zu verbergen, und lässt Sie es ersetzen: das Feld QBO-Bank-ID neben den Download-Schaltflächen, ?intuBid= in der API oder --intu-bid in der CLI. Um die ID Ihrer Bank zu finden, öffnen Sie eine .qbo, die Ihre Bank selbst erzeugt hat, und lesen Sie die Zeile <INTU.BID> — das ist die maßgebliche Quelle und die einzige, auf die wir verweisen.

Ich habe den Auszug erneut umgewandelt und es wurde nichts importiert

Das ist <FITID> bei der Arbeit. Jede Buchung trägt eine Instituts-Buchungs-ID, und QuickBooks merkt sich dauerhaft, welche es für ein Konto schon gesehen hat. Eine Buchung, deren FITID früher importiert wurde, wird stillschweigend übersprungen. Genau das verhindert, dass ein erneuter Import Ihr Journal verdoppelt.

Die ID muss also über Exporte desselben Auszugs hinweg stabil und innerhalb eines Auszugs eindeutig sein. Hier ist sie sha1(Kontonummer | Datum | Betrag in Cent | erste 48 Zeichen des Verwendungszwecks), gekürzt auf 24 Hex-Zeichen, mit angehängtem Zähler -1, -2, wenn ein Auszug dieselbe Buchung am selben Tag tatsächlich zweimal führt.

Die Folge, die man kennen sollte: Die ID leitet sich aus der Buchung ab. Wenn Sie also vor dem Export einen Betrag korrigieren, ändert sich die FITID dieser Zeile, und QuickBooks behandelt sie als neue Buchung. Erst korrigieren, dann einmal importieren.

Die Felder, an denen hängt, ob die Datei überhaupt aufgeht

ElementWofür es stehtWas dieser Konverter schreibt
INTU.BIDInstituts-ID; muss eine sein, die Intuit kennt3000, sofern Sie sie nicht ersetzen
FITIDID je Buchung; verhindert Dubletten beim erneuten Importsha1 der Buchung, stabil
BANKIDBankleitzahl / Routing-Nummer000000000, sofern Sie sie nicht ersetzen
ACCTTYPECHECKING / SAVINGS / MONEYMRKT / CREDITLINEIhre Wahl; steuert das Nachrichtenformat
DTSTART / DTENDZeitraum, den die Buchungsliste abdecktso geweitet, dass jede Zeile der Datei hineinfällt
TRNAMTBetrag mit Vorzeichennegativ für Ausgänge

Quelle: src/export/qbo.ts.

Eine Kreditkarte ist kein Bankkonto

OFX legt Kartenauszüge in ein anderes Nachrichtenformat: <CREDITCARDMSGSRSV1> mit <CCACCTFROM>, nicht <BANKMSGSRSV1> mit <BANKACCTFROM>. Exportieren Sie einen Kartenauszug als Girokonto, bietet QuickBooks an, ihn in ein Bankkonto zu importieren. Die Wahl Kreditkarte tauscht den ganzen Umschlag aus, nicht nur ein Etikett.

DTSTART und DTEND können still Zeilen verschlucken

Ein Importer darf Buchungen außerhalb des angegebenen Zeitraums ignorieren, und Auszüge führen regelmäßig eine Zeile, die einen Tag vor Periodenbeginn gebucht wurde. Dieser Konverter weitet den Zeitraum so, dass jede tatsächlich enthaltene Buchung hineinfällt — ein Fehler, den wir gefunden und behoben haben, keine Funktion.

Die Datei sieht für einen XML-Validator kaputt aus

Das soll sie. OFX 1.02 ist SGML, nicht XML: Blattelemente haben kein schließendes Tag, <TRNAMT>-84.97 endet also am Zeilenumbruch. Ein Validator, der </TRNAMT> erwartet, liest die falsche Spezifikation. Der Kopfblock oberhalb von <OFX> besteht ebenso aus schlichten Schlüssel-Wert-Zeilen.

Umlaute und Akzente kommen geglättet an

Der Kopf deklariert ENCODING:USASCII, der Rumpf muss also tatsächlich ASCII sein. Akzentuierte lateinische Zeichen werden transliteriert (ZürichZurich), kyrillische romanisiert (ОплатаOplata); was keine ASCII-Entsprechung hat, wird zu ?. Empfängernamen sind außerdem auf 32 Zeichen begrenzt — die OFX-Grenze für <NAME> — wobei der vollständige Verwendungszweck in <MEMO> steht, wohin der Rest einer gekürzten Beschreibung wandert.

QuickBooks Online nimmt auch CSV — ein anderes Tier

Die .qbo-Datei ist für Web Connect von QuickBooks Desktop. Der manuelle Upload von QuickBooks Online nimmt stattdessen CSV und akzeptiert genau zwei Layouts: drei Spalten (Date, Description, Amount, Ausgänge negativ) oder vier (Date, Description, Credit, Debit). Zwei Dinge daran überraschen jeden:

Der CSV-Export dieses Konverters hat eine Voreinstellung QuickBooks Online, die beide Layouts in Intuits Richtung erzeugt, die Spalten weglässt, an denen QuickBooks scheitern würde, und lange Auszüge automatisch in importierbare Teile zerlegt.

Was diese Seite Ihnen nicht sagen wird

Welche INTU.BID zu Ihrer konkreten Bank gehört. Es kursieren Listen, sie sind inoffiziell, und eine falsche ID erzeugt genau die Verwirrung, die diese Seite erklären soll. Lesen Sie sie aus einer .qbo, die Ihre eigene Bank ausgestellt hat.