Leitfaden für die Migration von QuickBooks zu Beancount
Phase 1: Datenexport aus QuickBooks
Die Migration von f ünf Jahren Daten beginnt damit, alle QuickBooks-Datensätze in einem nutzbaren Format zu extrahieren. QuickBooks Desktop und QuickBooks Online haben unterschiedliche Exportoptionen:
1.1 QuickBooks Desktop – Exportoptionen
IIF (Intuit Interchange Format): QuickBooks Desktop kann Listen (wie Kontenplan, Kunden, Lieferanten) in .IIF
-Textdateien exportieren. Gehen Sie in QuickBooks Desktop zu Datei → Dienstprogramme → Exportieren → Listen in IIF-Dateien, und wählen Sie dann die benötigten Listen aus (z. B. Kontenplan, Kunden, Lieferanten). Dies erzeugt eine Textdatei, die Kontonamen, -typen und Listendaten enthält. IIF ist ein proprietäres, aber reines Textformat, das relativ einfach zu parsen ist. Nutzen Sie es, um Ihren Kontenplan und Ihre Kontaktlisten als Referenz in Beancount zu erfassen.
Hauptbuch/Journal via CSV: Für Transaktionsdaten bietet QuickBooks Desktop keinen Ein-Klick-Voll-Export, aber Sie können Berichte verwenden. Die empfohlene Methode ist der Export des Journals (alle Buchungen) über den gewünschten Zeitraum. Öffnen Sie in QuickBooks Desktop Berichte → Buchhalter & Steuern → Journal, stellen Sie die Daten vom frühesten Vorgang bis heute ein und klicken Sie auf Exportieren → Excel. Speichern Sie das Ergebnis als CSV, nachdem Sie alle Berichtskopf-/Fußzeilen und leeren Spalten entfernt haben. Stellen Sie sicher, dass die numerischen Daten sauber sind: Geben Sie Cents an (z. B. 3.00
, nicht 3
), keine zusätzlichen Anführungszeichen und keine Währungssymbole oder doppelten Negativzeichen in der CSV-Datei. Die CSV-Datei sollte Spalten wie Datum, Transaktions-Nr., Name, Konto, Memo, Soll, Haben, Saldo enthalten (oder eine einzelne Betragsspalte, je nach Berichtsformat).
Tipp: QuickBooks Desktop 2015+ kann Transaktionen auch über den Suchen-Dialog exportieren. Verwenden Sie Bearbeiten → Suchen → Erweitert, stellen Sie den Datumsbereich auf fünf Jahre ein und exportieren Sie die Ergebnisse dann als CSV. Warnung: Einige Versionen begrenzen den Export auf 32.768 Zeilen. Wenn Sie sehr große Datenmengen haben, exportieren Sie jahrweise (oder in kleineren Blöcken), um eine Kürzung zu vermeiden, und führen Sie sie später zusammen. Stellen Sie sicher, dass sich die Datumsbereiche nicht überschneiden, um Duplikate zu vermeiden.
Andere Formate (QBO/QFX/QIF): QuickBooks Desktop kann Banktransaktionen über .QBO
(Web Connect) oder .QFX/.OFX
-Dateien importieren, aber für den Export aus QuickBooks sind diese nicht typisch. Wenn Ihr Ziel darin besteht, nur Banktransaktionen zu extrahieren, haben Sie diese möglicherweise bereits im QBO/OFX-Format von Ihrer Bank. Für einen vollständigen Hauptbuchexport bleiben Sie jedoch bei IIF und CSV. QuickBooks Desktop kann ohne Drittanbieter-Tools nicht direkt in QIF (Quicken Interchange Format) exportieren. Wenn Sie einen Weg finden, QIF zu erhalten, beachten Sie, dass einige Ledger-Tools (ältere Ledger 2.x) QIF lesen konnten, es aber besser ist, in unserer Pipeline mit CSV zu arbeiten.
1.2 QuickBooks Online – Exportoptionen
Integrierter Excel/CSV-Export: QuickBooks Online (QBO) bietet ein Daten exportieren-Tool. Gehen Sie zu Einstellungen ⚙ → Tools → Daten exportieren. Im Exportdialog verwenden Sie den Tab Berichte, um Daten auszuwählen (z. B. Hauptbuch oder Transaktionsliste) und den Tab Listen für Listen (Kontenplan usw.), wählen Sie Alle Daten und exportieren Sie nach Excel. QuickBooks Online lädt eine ZIP-Datei herunter, die mehrere Excel-Dateien für die ausgewählten Berichte und Listen enthält (z. B. Gewinn- und Verlustrechnung, Bilanz, Hauptbuch, Kunden, Lieferanten, Kontenplan usw.). Sie können diese Excel-Dateien dann zur Verarbeitung in CSV konvertieren.
Transaktionsdetailbericht: Wenn der Standard-Export von QBO keine einzelne Hauptbuchdatei enthält, können Sie manuell einen detaillierten Bericht erstellen:
- Navigieren Sie zu Berichte und suchen Sie Buchungsdetails nach Konto (oder Hauptbuch in einigen QBO-Versionen).
- Stellen Sie den Berichtszeitraum auf den gesamten Fünfjahreszeitraum ein.
- Setzen Sie unter den Berichtsoptionen Gruppieren nach = Keine (um einzelne Transaktionen ohne Zwischensummen aufzulisten).
- Passen Sie die Spalten an, um mindestens Folgendes einzuschließen: Datum, Transaktionstyp, Nummer, Name (Zahlungsempfänger/Kunde), Memo/Beschreibung, Konto, Soll, Haben (oder eine einzelne Betragsspalte) und Saldo. Fügen Sie Klasse oder Standort hinzu, falls verwendet.
- Führen Sie den Bericht aus und exportieren Sie ihn nach Excel.
Dies liefert ein detailliertes Hauptbuch aller Transaktionen. Speichern Sie es als CSV. Jede Zeile repräsentiert einen Buchungssatz (Split) einer Transaktion. Sie müssen später die Zeilen nach Transaktionen gruppieren, um sie zu konvertieren.
Kontenplan und andere Listen: QuickBooks Online kann den Kontenplan über Buchhaltung → Kontenplan → Stapelaktionen → Nach Excel exportieren exportieren. Tun Sie dies, um Kontonamen und -typen zu erhalten. Exportieren Sie ebenfalls Kunden, Lieferanten usw., wenn Sie die Namen für Metadaten übernehmen möchten.
QuickBooks Online API (Optional): Für einen programmatischen Ansatz bietet Intuit eine REST-API für QBO-Daten. Fortgeschrittene Benutzer können eine QuickBooks Online-App erstellen (erfordert ein Entwicklerkonto) und die API verwenden, um Daten im JSON-Format abzurufen. Zum Beispiel könnten Sie den Account
-Endpunkt für den Kontenplan und die JournalEntry
- oder GeneralLedger
-Berichtsendpunkte für Transaktionen abfragen. Es gibt Python-SDKs wie python-quickbooks
, die die API umschließen. Die Verwendung der API erfordert jedoch eine OAuth-Authentifizierung und ist für eine einmalige Migration übertrieben, es sei denn, Sie bevorzugen die Automatisierung. In den meisten Fällen ist der manuelle Export nach CSV/Excel einfacher und weniger fehleranfällig.
Phase 2: Transformation und Bereinigung der Daten
Sobald Sie QuickBooks-Daten im CSV- (und/oder IIF-)Format haben, besteht der nächste Schritt darin, sie in das reine Textformat von Beancount zu konvertieren. Dies umfasst das Parsen der Exporte, das Zuordnen von QuickBooks-Konten zu einem Beancount-Kontenplan und das Formatieren von Transaktionen in der Beancount-Syntax.
2.1 Parsen von QuickBooks-Exporten mit Python
Die Verwendung von Python gewährleistet Genauigkeit und Reproduzierbarkeit bei der Transformation. Wir skizzieren Skripte für zwei Hauptaufgaben: Importieren des Kontenplans und Konvertieren von Transaktionen.
Kontenimport und -zuordnung: Es ist entscheidend, Ihre Konten in Beancount einzurichten, bevor Sie Transaktionen hinzufügen. QuickBooks-Konten haben Typen (Bank, Forderungen, Aufwand usw.), die wir den Hierarchien von Beancount (Assets, Liabilities, Income, Expenses usw.) zuordnen werden. Zum Beispiel können wir eine Zuordnung wie diese verwenden:
# Zuordnung von QuickBooks-Kontotyp zu Beancount-Stammkategorie
AccountTypeMap = {
'BANK': 'Assets',
'CCARD': 'Liabilities',
'AR': 'Assets', # Forderungen als Aktivkonto
'AP': 'Liabilities', # Verbindlichkeiten als Passivkonto
'FIXASSET': 'Assets',
'OASSET': 'Assets', # Sonstige Vermögensgegenstände
'OCASSET': 'Assets', # Sonstiges Umlaufvermögen
'LTLIAB': 'Liabilities', # Langfristige Verbindlichkeiten
'OCLIAB': 'Liabilities', # Sonstige kurzfristige Verbindlichkeiten
'EQUITY': 'Equity',
'INC': 'Income',
'EXP': 'Expenses',
'EXINC': 'Income', # Sonstige Erträge
'EXEXP': 'Expenses', # Sonstige Aufwendungen
}
Mithilfe des IIF-Exports von QuickBooks Desktop oder der Kontenlisten-CSV von QBO rufen wir den Namen und Typ jedes Kontos ab. Dann:
-
Beancount-Kontonamen erstellen: QuickBooks verwendet manchmal Doppelpunkte (
:
) in Kontonamen, um Unterkonten zu kennzeichnen (z. B. "Umlaufvermögen:Girokonto"). Beancount verwendet dieselbe Doppelpunktnotation für die Hierarchie. Sie können den Namen oft direkt wiederverwenden. Wenn die QuickBooks-Kontonamen nicht mit einer Kategorie beginnen, stellen Sie die zugeordnete Kategorie voran. Zum Beispiel wird ein QuickBooks-Konto vom TypBANK
mit dem Namen "Girokonto" in Beancount zuAssets:Girokonto
. EinEXP
-Konto (Aufwand) "Bewirtung" wird zuExpenses:Bewirtung
, usw. -
Gültige Benennung sicherstellen: Entfernen oder ersetzen Sie alle Zeichen, die Beancount verwirren könnten. QuickBooks erlaubt Zeichen wie
&
oder/
in Namen. Es ist ratsam, Sonderzeichen zu entfernen oder zu ersetzen (z. B.&
durchund
ersetzen, Schrägstriche oder Leerzeichen entfernen). Stellen Sie außerdem sicher, dass alle Kontonamen nach der Transformation eindeutig sind – QuickBooks hat möglicherweise denselben Unterkontonamen unter verschiedenen übergeordneten Konten zugelassen, was in Ordnung ist, aber in Beancount muss der vollständige Name (mit übergeordneten Konten) eindeutig sein. Benennen Sie sie bei Bedarf um oder fügen Sie eine Kennzeichnung hinzu, um sie zu unterscheiden. -
Kontoeröffnungen ausgeben: In Beancount muss jedes verwendete Konto mit einer
open
-Direktive eröffnet werden. Sie können ein Datum vor Ihrer ersten Transaktion wählen (z. B. bei der Migration von Daten aus 2019–2023 verwenden Sie2018-12-31
oder ein noch früheres Datum für alle Eröffnungen). Das Skript schreibt dann Zeilen wie:2018-12-31 open Assets:Girokonto USD
2018-12-31 open Expenses:Bewirtung USD
für jedes Konto (angenommen, USD ist die Hauptwährung). Verwenden Sie die entsprechende Währung für jedes Konto (siehe Hinweise zu mehreren Währungen unten).
Transaktionskonvertierung: Die Hauptherausforderung besteht darin, den QuickBooks-Transaktionsexport (CSV) in Beancount-Einträge zu konvertieren. Jede QuickBooks-Transaktion (Rechnung, Beleg, Scheck, Journaleintrag usw.) kann mehrere Buchungssätze (Zeilen) haben, die zu einer einzigen Beancount-Transaktion zusammengefasst werden müssen.
Wir verwenden den CSV-Leser von Python, um die exportierten Zeilen zu durchlaufen und die Buchungssätze zu sammeln:
import csv
from collections import defaultdict
# Alle Zeilen aus der QuickBooks-Journal-CSV lesen
rows = []
with open('quickbooks_exported_journal.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)
# Zeilen nach Transaktion gruppieren (angenommen, 'Transaktions-Nr.' identifiziert Transaktionen)
transactions = defaultdict(list)
for line in rows:
trans_id = line.get('Trans #') or line.get('Transaction ID') or line.get('Num')
transactions[trans_id].append(line)
Jetzt ist transactions
ein Wörterbuch, bei dem jeder Schlüssel eine Transaktions-ID/Nummer und der Wert die Liste der Buchungssätze für diese Transaktion ist. Als Nächstes konvertieren wir jede Gruppe in Beancount:
def format_date(qb_date):
# QuickBooks-Datumsangaben könnten wie "12/31/2019" aussehen
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"
output_lines = []
for trans_id, splits in transactions.items():
# Buchungssätze bei Bedarf nach Zeilenreihenfolge sortieren (sie kommen normalerweise in der richtigen Reihenfolge)
splits = sorted(splits, key=lambda x: x.get('Line') or 0)
first = splits[0]
date = format_date(first['Date'])
payee = first.get('Name', "").strip()
memo = first.get('Memo', "").strip()
# Transaktionskopf
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # Referenznummer einfügen, falls verfügbar
output_lines.append(f" number: \"{first['Num']}\"")
# Durch jeden Buchungssatz/Posten iterieren
for split in splits:
acct_name = split['Account'].strip()
# QuickBooks-Kontoname dem Beancount-Konto zuordnen (mithilfe der früheren Zuordnung)
beancount_acct = account_map.get(acct_name, acct_name)
# Betrag mit Vorzeichen bestimmen:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# Einige Exporte haben eine einzelne Betragsspalte (negativ für Haben-Buchungen)
amt_str = amount
else:
# Bei getrennten Soll-/Haben-Spalten
amt_str = debit if debit else f"-{credit}"
# Kommas in Zahlen zur Sicherheit entfernen
amt_str = amt_str.replace(",", "")
# Währung anhängen
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# Memo/Beschreibung für den Buchungssatz
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# Ende der Transaktion – Leerzeile
output_lines.append("")
Diese Skriptlogik tut Folgendes:
- Formatiert das Datum in YYYY-MM-DD für Beancount.
- Verwendet den Zahlungsempfänger (Name) und das Memo für den Buchungstext. Zum Beispiel:
2020-05-01 * "ACME Corp" "Rechnungszahlung"
(Wenn kein Zahlungsempfänger vorhanden ist, können Sie den QuickBooks-Transaktionstyp verwenden oder den Zahlungsempfänger leer lassen). - Fügt
number
-Metadaten hinzu, wenn eine Referenznummer vorhanden ist (Scheck-Nr., Rechnungs-Nr. usw.). - Iteriert durch jede Buchungszeile:
- Ordnet den QuickBooks-Kontonamen dem Beancount-Konto mithilfe eines Wörterbuchs
account_map
zu (das aus dem Kontenplan-Schritt gefüllt wurde). - Bestimmt den Betrag. Je nach Export haben Sie möglicherweise eine einzelne Amount-Spalte (mit positiven/negativen Werten) oder separate Soll- und Haben-Spalten. Der obige Code behandelt beide Fälle. Er stellt sicher, dass Haben-Buchungen als negative Beträge dargestellt werden (da in Beancount eine einzelne Zahl mit Vorzeichen pro Posten verwendet wird).
- Hängt die Währung an (angenommen USD, es sei denn, eine andere Währungsspalte ist vorhanden).
- Schreibt die Beancount-Buchungszeile mit dem Konto, dem Betrag und einem Kommentar mit dem Zeilen-Memo. Zum Beispiel:
Assets:Girokonto 500.00 USD ; Einzahlung
Income:Umsatzerloese -500.00 USD ; Einzahlung
Dies spiegelt eine Einzahlung von $500 wider (von Umsatzerlösen auf das Girokonto).
- Ordnet den QuickBooks-Kontonamen dem Beancount-Konto mithilfe eines Wörterbuchs
- Nach der Auflistung aller Buchungssätze trennt eine Leerzeile die Transaktion.
Umgang mit mehreren Währungen: Wenn Ihre QuickBooks-Daten mehrere Währungen beinhalten, fügen Sie den Währungscode zu jeder Buchung hinzu (wie oben gezeigt). Stellen Sie sicher, dass Konten in Fremdwährungen mit dieser Währung eröffnet werden. Wenn Sie zum Beispiel ein Bankkonto in EUR haben, würden Sie open Assets:Bank:Girokonto EUR
ausgeben, und die Transaktionen auf diesem Konto verwenden EUR. Beancount unterstützt Hauptbücher mit mehreren Währungen und verfolgt implizite Umrechnungen, aber Sie müssen möglicherweise Preiseinträge für Wechselkurse hinzufügen, wenn Sie eine Umrechnung in eine Basiswährung in Berichten wünschen. Es wird auch empfohlen, Ihre Hauptbetriebswährung am Anfang der Beancount-Datei zu deklarieren (z. B. option "operating_currency" "USD"
).
Ausführen der Konvertierung: Speichern Sie das Python-Skript (z. B. als qb_to_beancount.py
) und führen Sie es auf Ihren exportierten Dateien aus. Es sollte eine .beancount
-Datei erzeugen, die alle Konten und Transaktionen enthält.
2.2 Umgang mit Randfällen und Datenbereinigung
Achten Sie bei der Transformation auf diese häufigen Fallstricke und wie Sie sie beheben können:
-
Nicht übereinstimmende Kontonamen: QuickBooks könnte Kontonamen haben, die mit den hierarchischen Namen von Beancount kollidieren. Zum Beispiel könnte QuickBooks zwei verschiedene übergeordnete Konten haben, die jeweils ein Unterkonto namens "Versicherung" haben. In Beancount muss
Expenses:Versicherung
eindeutig sein. Lösen Sie dieses Problem, indem Sie eines umbenennen (z. B. "Versicherung-Fahrzeug" vs. "Versicherung-Gesundheit") vor dem Export oder sie in Ihrem Skript eindeutigen Beancount-Konten zuordnen. Konsistente Namenskonventionen (keine Sonderzeichen und Verwendung von Hierarchien) sparen Kopfschmerzen. Verwenden Sie bei Bedarf den Ansatz einer Remapping-Datei: Pflegen Sie eine CSV-Datei oder ein Wörterbuch mit altem Namen → neuem Beancount-Namen und wenden Sie es während der Konvertierung an (unser Beispielcode verwendet eineaccount_map
und könnte Überschreibungen aus einer Datei laden). -
Daten und Formate: Stellen Sie sicher, dass alle Datumsangaben konsistent formatiert sind. Das obige Skript normalisiert M/D/Y in das ISO-Format. Achten Sie auch auf Probleme mit Geschäftsjahren im Vergleich zu Kalenderjahren, wenn Ihr Fünfjahreszeitraum einen Jahreswechsel überschreitet. Beancount kümmert sich nicht um Geschäftsjahresgrenzen, aber Sie möchten möglicherweise später Dateien zur besseren Übersichtlichkeit nach Jahren aufteilen.
-
Numerische Präzision: QuickBooks behandelt Währungen mit Cents, daher ist das Arbeiten in Cents normalerweise in Ordnung. Alle Beträge sollten idealerweise zwei Dezimalstellen in der CSV haben. Wenn Beträge in ganze Zahlen umgewandelt wurden (keine Dezimalstellen) oder Kommas/Klammern (für negative Werte) enthalten, bereinigen Sie diese im Skript (Kommas entfernen,
(100.00)
in-100.00
umwandeln usw.). Der CSV-Export sollte bei korrekter Durchführung (gemäß Anleitung) diese Formatierungsprobleme bereits vermeiden. -
Negative Beträge und Vorzeichen: QuickBooks-Berichte zeigen negative Werte manchmal als
-100.00
oder als(100.00)
oder in bestimmten Excel-Exporten sogar als--100.00
. Der Bereinigungsschritt sollte dies behandeln. Stellen Sie sicher, dass die Soll- und Haben-Beträge jeder Transaktion auf Null aufgehen. Beancount wird dies erzwingen (wenn es nicht ausgeglichen ist, wird beim Import ein Fehler ausgegeben). -
Transaktionsduplikate: Wenn Sie Transaktionen in Stapeln exportieren mussten (z. B. jahrweise oder kontenweise), seien Sie vorsichtig beim Zusammenführen ohne Überlappung. Überprüfen Sie, ob die erste Transaktion eines Jahres nicht auch die letzte des vorherigen Stapels ist usw. Es ist leicht, versehentlich einige Transaktionen an den Grenzen zu duplizieren. Wenn Sie Duplikate vermuten, können Sie die endgültigen Beancount-Einträge nach Datum sortieren und nach identischen Einträgen suchen oder die eindeutigen Transaktions-Tags von Beancount verwenden, um sie zu finden. Eine Strategie besteht darin, QuickBooks-Transaktionsnummern als Metadaten einzufügen (z. B. die
Transaktions-Nr.
oder Rechnungsnummer alstxn
-Tag oderquickbooks_id
-Metadaten verwenden) und dann sicherzustellen, dass keine Duplikate dieser IDs vorhanden sind. -
Unausgeglichene Buchungssätze / Verrechnungskonten: QuickBooks könnte seltsame Fälle haben, wie eine Transaktion mit einer Differenz, die QuickBooks automatisch auf ein "Eröffnungsbilanz-Eigenkapital"- oder "Gewinnrücklagen"-Konto gebucht hat. Zum Beispiel, wenn anfängliche Kontensalden eingerichtet werden, bucht QuickBooks oft Differenzen auf ein Eigenkapitalkonto. Diese werden in den exportierten Transaktionen erscheinen. Beancount erfordert einen expliziten Ausgleich. Möglicherweise müssen Sie ein Eigenkapitalkonto für Eröffnungsbilanzwerte einführen (üblicherweise
Equity:Opening-Balances
), um QuickBooks zu spiegeln. Es ist eine gute Praxis, am ersten Tag Ihres Hauptbuchs einen Eröffnungsbilanzeintrag zu haben, der die Anfangssalden aller Konten festlegt (siehe Phase 5). -
Randfälle bei mehreren Währungen: Bei Verwendung mehrerer Währungen könnte der Export von QuickBooks alle Beträge in der Heimatwährung oder in ihrer nativen Währung auflisten. Idealerweise erhalten Sie die Daten in der nativen Währung für jedes Konto (die Berichte von QuickBooks Online tun dies normalerweise). In Beancount trägt jede Buchung eine Währung. Wenn QuickBooks Wechselkurse oder eine Umrechnung in die Heimatwährung bereitgestellt hat, können Sie diese ignorieren und sich auf die Preiseinträge von Beancount verlassen. Wenn QuickBooks keine Wechselkurse exportiert hat, möchten Sie möglicherweise manuell Preiseinträge (z. B. mit der
price
-Direktive von Beancount) für wichtige Daten hinzufügen, um die Bewertung abzugleichen. Für die grundlegende Integrität des Hauptbuchs reicht es jedoch aus, dass die Transaktionen in ihren ursprünglichen Währungen ausgeglichen sind – nicht realisierte Gewinne/Verluste müssen nicht explizit erfasst werden, es sei denn, Sie möchten dieselben Berichte. -
Forderungen / Verbindlichkeiten: QuickBooks verfolgt Rechnungs- und Belegdetails (Fälligkeitsdaten, Zahlungsstatus usw.), die in einem reinen Hauptbuch nicht vollständig übertragen werden. Sie erhalten die Forderungs- und Verbindlichkeitstransaktionen (Rechnungen erhöhen Forderungen, Zahlungen verringern Forderungen usw.), aber nicht die Rechnungsdokumente oder Kundensalden pro Rechnung. Daher sollten Sie nach der Migration überprüfen, ob Ihre Forderungs- und Verbindlichkeitssalden in Beancount den offenen Salden von Kunden/Lieferanten in QuickBooks entsprechen. Wenn Sie Rechnungen verfolgen müssen, können Sie die Metadaten von Beancount verwenden (z. B. ein
invoice
-Tag oder einen Link einfügen). Die QuickBooks-Rechnungsnummern sollten in den FeldernNum
oderMemo
enthalten sein – unser Skript behält dieNum
alsnumber: "..."
in den Transaktionsmetadaten bei. -
Inaktive oder geschlossene Konten: Der IIF-Export kann inaktive Konten enthalten (wenn Sie diese Option gewählt haben). Es ist in Ordnung, sie zu importieren (sie werden nur keine Transaktionen und einen Nullsaldo haben, wenn sie wirklich inaktiv sind). Sie können sie in Beancount nach dem Datum der letzten Transaktion mit einer
close
-Direktive als geschlossen markieren. Dies hält Ihr Hauptbuch sauber. Zum Beispiel:2023-12-31 close Expenses:AltesKonto ; nach Migration geschlossen
Dies ist optional und dient hauptsächlich der Sauberkeit.
Durch sorgfältige Bereinigung und Zuordnung der Daten wie oben beschrieben erhalten Sie eine Beancount-Hauptbuchdatei, die Ihre QuickBooks-Daten strukturell widerspiegelt. Der nächste Schritt besteht darin, zu überprüfen, ob sie auch numerisch QuickBooks widerspiegelt.
Phase 3: Datenvalidierung und Abgleich
Die Validierung ist eine kritische Phase bei einer Buchhaltungsdatenmigration. Wir müssen sicherstellen, dass das Beancount-Hauptbuch auf den Cent genau mit den QuickBooks-Büchern übereinstimmt. Es können verschiedene Strategien und Werkzeuge verwendet werden:
3.1 Abgleich der Saldenbilanz
Ein Saldenbilanz-Bericht listet die Endsalden aller Konten auf (mit Soll und Haben oder positiv/negativ angegeben) und sollte sich zu Null summieren. Das Ausführen einer Saldenbilanz in beiden Systemen für dasselbe Datum ist der schnellste Weg, um die allgemeine Genauigkeit zu bestätigen.
-
In QuickBooks: Führen Sie einen Saldenbilanz-Bericht für den letzten Tag des letzten Jahres aus (z. B. 31. Dezember 2023). Dieser Bericht zeigt den Saldo jedes Kontos. Exportieren Sie ihn oder notieren Sie sich die wichtigsten Zahlen.
-
In Beancount: Verwenden Sie die Berichtsfunktionen von Beancount, um eine Saldenbilanz zu erstellen. Eine einfache Methode ist die Kommandozeile:
bean-report migriert.beancount balances
Der
balances
-Bericht ist eine Saldenbilanz, die alle Konten und ihre Salden auflistet. Sie können die Datei auch in Fava (der Web-UI von Beancount) öffnen und den Abschnitt Salden oder Bilanz ansehen. Jeder Kontostand in Beancount sollte mit der QuickBooks-Saldenbilanz übereinstimmen. Wenn QuickBooks zum Beispiel Forderungen = $5.000 anzeigt, sollte das Konto Assets:Forderungen in Beancount insgesamt $5.000 (Soll) betragen. Wenn Umsatzerlöse = $200.000, sollte das Konto Income:Umsatzerloese in Beancount $200.000 (Haben, was als -200.000 angezeigt werden könnte, wenn eine Saldenbilanz verwendet wird, die Haben-Salden als negativ darstellt) aufweisen.
Wenn es Diskrepanzen gibt, lokalisieren Sie diese:
- Prüfen Sie, ob ein ganzes Konto fehlt oder zusätzlich vorhanden ist (haben wir ein Konto vergessen oder eines eingeschlossen, das bereits vor dem Migrationszeitraum geschlossen wurde?).
- Wenn ein Saldo falsch ist, gehen Sie ins Detail: QuickBooks kann einen Konto-Schnellbericht oder einen Kontodetailbericht für dieses Konto ausführen, und Sie können dies mit dem Register von Beancount für dieses Konto vergleichen (
bean-report migriert.beancount register -a Kontoname
). Manchmal stammen Unterschiede von einer fehlenden oder doppelten Transaktion.
Überprüfen Sie auch, ob die Summe aller Konten in der Saldenbilanz von Beancount Null ist (es wird eine Gesamtsumme gedruckt, die Null oder sehr nahe an Null sein sollte). Beancount erzwingt die doppelte Buchführung, also wenn Sie eine Nicht-Null-Differenz haben, bedeutet dies, dass Aktiva minus Passiva-Eigenkapital nicht auf Null aufgegangen sind, was auf ein Problem hindeutet (was QuickBooks normalerweise auch nicht zulassen würde, aber passieren könnte, wenn einige Daten verloren gingen).
3.2 Vergleich der Kontensalden
Über die Saldenbilanz hinaus können Sie bestimmte Finanzberichte vergleichen:
-
Bilanz: Führen Sie eine QuickBooks-Bilanz für das Enddatum und eine Beancount-Bilanz (
bean-report migriert.beancount balsheet
) aus. Dies ist ähnlich wie die Saldenbilanz, aber nach Aktiva, Passiva und Eigenkapital geordnet. Die Zahlen sollten kategorieweise übereinstimmen. Für eine detailliertere Prüfung vergleichen Sie die Summen der Hauptkonten: Bargeld, Forderungen, Anlagevermögen, Verbindlichkeiten, Eigenkapital usw. -
Gewinn- und Verlustrechnung (GuV): Führen Sie eine GuV für den Fünfjahreszeitraum (oder jahrweise) in QuickBooks und in Beancount aus (
bean-report migriert.beancount income
für eine GuV des gesamten Zeitraums). Der Jahresüberschuss aus Beancount sollte für jeden Zeitraum dem von QuickBooks entsprechen. Wenn Sie alle fünf Jahre migriert haben, sollte der kumulierte Jahresüberschuss übereinstimmen. Sie können auch einzelne Umsatz- und Aufwandssummen vergleichen, um sicherzustellen, dass keine Kategorie übersehen oder verdoppelt wurde. -
Stichprobenartige Transaktionsprüfung: Wählen Sie einige zufällige Transaktionen aus (insbesondere aus jedem Jahr und jedem Hauptkonto) und überprüfen Sie, ob sie korrekt migriert wurden. Suchen Sie zum Beispiel eine Rechnung von vor 3 Jahren in QuickBooks und suchen Sie dann nach ihrem Betrag oder Memo in der Beancount-Datei (da alle Transaktionen Text sind, können Sie die
.beancount
-Datei in einem Texteditor öffnen oder Suchwerkzeuge verwenden). Überprüfen Sie, ob Datum, Beträge und Konten übereinstimmen. Dies hilft, Datumsformatierungsprobleme oder falsch zugeordnete Konten zu finden.
3.3 Automatisierte Integritätsprüfungen
Nutzen Sie die eigenen Validierungswerkzeuge von Beancount:
-
bean-check: Führen Sie
bean-check migriert.beancount
aus. Dies wird die Datei parsen und alle Fehler in der Syntax oder beim Ausgleich melden. Wenn das Skript etwas übersehen hat, wie ein nicht eröffnetes Konto oder eine nicht ausgeglichene Transaktion, wirdbean-check
dies kennzeichnen. Ein sauberer Durchlauf (keine Ausgabe) bedeutet, dass die Datei zumindest intern konsistent ist. -
Saldo-Zusicherungen: Sie können explizite Saldo-Zusicherungen (
balance assertions
) im Hauptbuch für wichtige Konten als zusätzliche Prüfung hinzufügen. Wenn Sie zum Beispiel den Kontostand eines Bankkontos an einem bestimmten Datum kennen, fügen Sie eine Zeile hinzu:2023-12-31 balance Assets:Bank:Girokonto 10000.00 USD
Dann wirdbean-check
sicherstellen, dass im Hauptbuch zu diesem Datum der Saldo tatsächlich $10.000 beträgt. Dies ist optional, kann aber für sehr wichtige Konten nützlich sein. Sie könnten Endsalden aus QuickBooks übernehmen (z. B. am Ende jedes Jahres) und sie in der Beancount-Datei zusichern. Wenn eine Zusicherung fehlschlägt, meldet Beancount eine Differenz. -
Saldenbilanz-Fortschreibung: Wenn Sie es vorziehen, können Sie eine periodenweise Überprüfung durchführen. Vergleichen Sie für jedes Jahr die Nettoveränderung. Zum Beispiel den Jahresüberschuss in QuickBooks 2020 im Vergleich zu Beancount 2020 usw., um sicherzustellen, dass jedes Jahr ordnungsgemäß ins Eigenkapital abgeschlossen wurde (QuickBooks überträgt den Jahresüberschuss automatisch in die Gewinnrücklagen jedes neuen Jahres; in Beancount sehen Sie nur das kumulierte Eigenkapital). Wenn Sie Unterschiede sehen, könnte dies auf ein Problem in den Daten eines bestimmten Jahres hindeuten.
-
Anzahl der Transaktionen und Duplikate: Zählen Sie die Anzahl der Transaktionen in QuickBooks im Vergleich zu Beancount. QuickBooks zeigt nicht einfach eine direkte Anzahl an, aber Sie können dies abschätzen, indem Sie Zeilen in der CSV-Datei zählen (jeder Transaktionskopf vs. Buchungssätze). In Beancount ist ein schneller Weg, das Vorkommen von
txn
oder* "
in der Datei zu zählen. Sie sollten gleich oder etwas höher sein als in QuickBooks (wenn Sie Eröffnungsbilanztransaktionen oder Anpassungen hinzugefügt haben). Eine signifikante Abweichung bedeutet, dass etwas ausgelassen oder dupliziert worden sein könnte. Unsere Verwendung von eindeutigen IDs in den Metadaten kann helfen: Wenn Sie Duplikate vermuten, suchen Sie in der Beancount-Datei nach derselben Scheck- oder Rechnungsnummer, die zweimal erscheint, obwohl sie es nicht sollte. -
Abstimmungsstatus: Wir haben in unserem Skript Metadaten wie
rec: "y"
oder"n"
basierend auf dem abgestimmten Status in QuickBooks eingefügt (alsrec
im Beispiel). Dies ist keine Standardfunktion von Beancount (Beancount verfolgt den Status "ausgeglichen/ausstehend" nicht auf die gleiche Weise wie Ledger), aber es können hilfreiche Metadaten sein. Sie könnten überprüfen, ob alle in QuickBooks abgestimmten Transaktionen vorhanden sind. Letztendlich könnte die erneute Abstimmung der Bankkonten in Beancount (mithilfe Ihrer Kontoauszüge) der endgültige Beweis sein, dass nichts fehlt.
Durch diese Validierungen schaffen Sie Vertrauen, dass die Migration die Daten erhalten hat. Nehmen Sie sich für diese Phase Zeit – es ist einfacher, Anomalien jetzt zu beheben als Monate später, wenn man sich möglicherweise auf die Bücher verlässt. Häufige Probleme bei fehlgeschlagener Validierung sind: ein fehlender Eröffnungssaldo eines Kontos, eine Transaktion mit einem Datum außerhalb des Bereichs oder eine Vorzeichenumkehr bei einem Eintrag. Alle sind behebbar, sobald sie identifiziert wurden.
Phase 4: Übernahme in das Beancount-Hauptbuch
Nach der Bereinigung und Validierung ist es an der Zeit, die Daten in Ihrer Beancount-Hauptbuchstruktur zu formalisieren. "Übernahme" bedeutet hier sowohl die Finalisierung der Hauptbuchdateien als auch deren potenzielle Eincheckung in ein Versionskontrollsystem zur Nachvollziehbarkeit.
4.1 Organisation der Hauptbuchdateien und Konfiguration
Entscheiden Sie, wie Sie die Beancount-Hauptbuchdateien strukturieren. Für fünf Jahre Daten können Sie alles in einer Datei behalten oder nach Jahr oder Kategorie aufteilen. Eine übliche, klare Struktur ist:
- Haupt-Hauptbuchdatei: z.B.
ledger.beancount
– Dies ist der Einstiegspunkt, der andere Dateieninclude
-n kann. Sie könnte globale Optionen enthalten und dann die jährlichen Dateien einbinden. - Kontendatei: Definieren Sie den Kontenplan und die Eröffnungssalden. Zum Beispiel
accounts.beancount
mit allenopen
-Direktiven (wie vom Skript generiert). Sie könnten hier auch Waren (Währungen) auflisten. - Transaktionsdateien: Eine pro Jahr, z.B.
2019.beancount
,2020.beancount
, usw., die die Transaktionen für dieses Jahr enthalten. Dies hält jede Datei überschaubar und ermöglicht es Ihnen, sich bei Bedarf auf ein Jahr zu konzentrieren. Alternativ können Sie nach Entität oder Konto aufteilen, aber die zeitbasierte Aufteilung ist für Finanzdaten unkompliziert.
Beispiel für eine Hauptdatei:
option "title" "Mein Geschäfts-Hauptbuch"
option "operating_currency" "USD"
include "accounts.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"
Auf diese Weise werden alle Daten aggregiert, wenn Sie Berichte ausführen, aber Sie behalten die Ordnung bei.
Beancount erfordert nicht mehrere Dateien – Sie könnten eine große Datei haben – aber die obige Struktur verbessert die Klarheit und die Versionskontrolle. Gemäß den Best Practices von Beancount ist es gut, klare Abschnittsüberschriften zu verwenden und zusammengehörige Einträge logisch zu gruppieren.
4.2 Festlegen von Eröffnungssalden und Eigenkapital
Wenn Ihre Migration nicht bei absolut Null beginnt, müssen Sie Eröffnungssalden behandeln. Zwei Szenarien:
-
Bücher beginnen von Grund auf: Wenn der Fünfjahreszeitraum mit der Gründung des Unternehmens beginnt (z. B. Sie haben im Januar 2019 mit QuickBooks begonnen, wobei alle Konten auf Null standen, außer dem anfänglichen Eigenkapital), benötigen Sie möglicherweise keine separate Eröffnungssaldo-Transaktion. Die ersten Transaktionen im Jahr 2019 (wie die anfängliche Finanzierung eines Bankkontos) werden natürlich die Anfangssalden festlegen. Stellen Sie nur sicher, dass jegliches Anfangskapital oder vorherige Gewinnrücklagen über Eigenkapitaltransaktionen verbucht werden.
-
Bücher mittendrin (teilweise Historie): Wenn Sie QuickBooks früher begonnen haben und 2019 ein Mittelpunkt ist, dann hatte jedes Konto zum 1. Januar 2019 einen vorgetragenen Saldo. QuickBooks hätte diese als Eröffnungssalden oder Gewinnrücklagen. In Beancount ist es üblich, einen Eröffnungsbilanzeintrag am Tag vor Ihrem Startdatum zu erstellen:
- Verwenden Sie ein Eigenkapitalkonto namens
Equity:Opening-Balances
(oder ähnlich), um die Summe aller Eröffnungsbeträge auszugleichen. - Beispiel: Wenn am 31.12.2018 der Kassenbestand $10.000, die Forderungen $5.000 und die Verbindlichkeiten $3.000 (Haben) betrugen, würden Sie eine Transaktion schreiben:
2018-12-31 * "Eröffnungsbilanzwerte"
Assets:Kasse 10000.00 USD
Assets:Forderungen 5000.00 USD
Liabilities:Verbindlichkeiten -3000.00 USD
Equity:Opening-Balances -12000.00 USD
Dies lässt Opening-Balances mit der negativen Summe (–$12k) zurück, was den Eintrag ausgleicht. Jetzt beginnen alle Aktiv-/Passivkonten das Jahr 2019 mit korrekten Salden. Dies sollte alle "Gewinnrücklagen" oder Vortragssalden von QuickBooks widerspiegeln. - Alternativ verwenden Sie die
pad
- undbalance
-Direktiven von Beancount: Für jedes Konto können Sie es von Opening-Balancespad
-den und den Saldobalance
-n. Dies ist ein automatisierterer Weg. Zum Beispiel:2018-12-31 pad Assets:Kasse Equity:Opening-Balances
2018-12-31 balance Assets:Kasse 10000.00 USD
Dies weist Beancount an, den notwendigen Eintrag (auf Opening-Balances) einzufügen, damit der Kassenbestand an diesem Datum 10000 USD beträgt. Tun Sie dies für jedes Konto. Das Ergebnis ist ähnlich, aber das Schreiben einer expliziten Transaktion wie in der ersten Methode ist auch unkompliziert.
- Verwenden Sie ein Eigenkapitalkonto namens
-
Gewinnrücklagen: QuickBooks exportiert nicht explizit eine "Gewinnrücklagen"-Transaktion – es berechnet sie nur. Nach der Migration stellen Sie möglicherweise fest, dass Equity:Gewinnrücklagen Null ist, wenn Sie es nicht erstellt haben. In Beancount sind Gewinnrücklagen einfach die Gewinne der Vorjahre. Sie können wählen, ein Gewinnrücklagenkonto zu erstellen und die Gewinne der Vorjahre am ersten Tag jedes neuen Jahres dorthin zu übertragen, oder einfach das Eigenkapital die Summe aller Erträge/Aufwendungen sein zu lassen (was im Eigenkapitalabschnitt in Berichten erscheint). Zur Transparenz buchen einige Benutzer jährlich Abschlussbuchungen. Dies ist optional und dient hauptsächlich der Darstellung. Da wir alle Transaktionen migriert haben, wird der Gewinn für jedes Jahr natürlich zusammengefasst, wenn Sie einen Bericht pro Jahr ausführen.
-
Vergleichende Prüfungen: Führen Sie nach dem Festlegen der Eröffnungssalden eine Bilanz zum Startdatum aus, um sicherzustellen, dass alles korrekt ist (sie sollte diese Eröffnungssalden im Vergleich zum Eröffnungskapital zeigen, die sich zu Null summieren).
4.3 Finalisierung und Versionskontrolle
Nachdem die Daten im Beancount-Format und strukturiert sind, ist es ratsam, die Dateien in ein Versionskontroll-Repository (z. B. Git) zu committen. Jede Änderung am Hauptbuch kann nachverfolgt werden, und Sie haben einen Prüfpfad aller Änderungen. Dies ist ein Hauptvorteil der Plain-Text-Buchhaltung. In QuickBooks sind Änderungen beispielsweise möglicherweise nicht leicht vergleichbar, aber in Beancount können Sie zeilenweise Unterschiede sehen. Wie einige Benutzer anmerken, erhalten Sie mit Beancount Transparenz und die Möglichkeit, Änderungen bei Bedarf rückgängig zu machen – jeder Eintrag kann mit einer Änderungshistorie verknüpft werden.
Erwägen Sie, den Commit dieser initialen Migration als v1.0
oder ähnlich zu taggen, damit Sie wissen, dass er den Zustand der Bücher darstellt, wie er aus QuickBooks importiert wurde. In Zukunft werden Sie neue Transaktionen direkt in Beancount eingeben (oder aus Bank-Feeds importieren usw.), und Sie können normale Softwareentwicklungspraktiken anwenden (monatliches oder tägliches Committen, Verwendung von Branches für Experimente usw.).
Einrichtung von Fava oder anderen Tools: Fava ist eine Webschnittstelle für Beancount, die es einfach macht, Berichte anzuzeigen. Führen Sie nach dem Commit fava ledger.beancount
aus, um die Finanzberichte zu durchsuchen und sie ein letztes Mal mit Ihren QuickBooks-Berichten zu vergleichen. Sie könnten kleine Unterschiede in einer UI leichter erkennen (zum Beispiel zeigt ein Konto, das Null sein sollte, aber einen kleinen Saldo aufweist, einen fehlenden Abschlusseintrag oder eine verirrte Transaktion an).
Namenskonventionen und Konsistenz: Sie haben jetzt die volle Kontrolle, also stellen Sie Konsistenz sicher:
- Alle Konten sollten klare Namen haben, die mit großgeschriebenen Kategorienamen beginnen (Assets, Liabilities usw.). Wenn einige seltsam aussehen (z. B.
Assets:assets:EinKonto
aufgrund eines Groß-/Kleinschreibungsfehlers aus QuickBooks), benennen Sie sie in der Kontendatei um und aktualisieren Sie die Transaktionen (ein schnelles Suchen/Ersetzen in der Datei kann dies tun, oder verwenden Siebean-format
von Beancount oder den Multi-Cursor des Editors). - Warensymbole (Währungscodes) sollten konsistent sein. Für USD verwenden Sie überall
USD
(nicht$
oderUS$
). Für andere verwenden Sie Standardcodes (EUR, GBP usw.). Diese Konsistenz ist wichtig für die Preissuche und Berichte von Beancount. - Entfernen Sie alle temporären oder Dummy-Konten, die möglicherweise erstellt wurden (wenn Sie zum Beispiel
Expenses:Sonstiges
für unbekannte Konten im Skript als Sammelkonto verwendet haben, versuchen Sie, diese durch korrekte Zuordnung aller Konten zu eliminieren).
Abschalten von QuickBooks: An diesem Punkt sollten Sie parallele Bücher in Beancount haben, die mit QuickBooks übereinstimmen. Einige entscheiden sich dafür, beide Systeme für eine kurze Zeit parallel zu betreiben, um sicherzustellen, dass nichts übersehen wurde. Aber wenn die Validierung solide ist, können Sie die QuickBooks-Bücher "schließen":
- Wenn dies eine Unternehmensumgebung ist, erwägen Sie den Export aller QuickBooks-Quelldokumente (Rechnungen, Belege, Quittungen) für die Aufzeichnungen, da diese in Beancount nicht existieren werden, es sei denn, Sie hängen sie manuell an.
- Bewahren Sie eine Sicherung der QuickBooks-Daten auf (sowohl die Firmendatei als auch die Exportdateien).
- Führen Sie das Beancount-Hauptbuch zukünftig als primäres Aufzeichnungssystem.
Durch die Übernahme der Daten in das Beancount-Hauptbuch haben Sie die Migrationspipeline abgeschlossen. Der letzte Schritt besteht darin, eine Prüfung durchzuführen und die Konsistenz der Finanzberichte nachzuweisen, um sich selbst (und alle Stakeholder oder Prüfer) davon zu überzeugen, dass die Migration erfolgreich war.
Phase 5: Audit nach der Migration und Beispiele
Um den Erfolg der Migration zu veranschaulichen, bereiten Sie einen Vorher-Nachher-Vergleich der Finanzberichte und möglicherweise einen Diff der Transaktionen vor. Dies liefert den Beweis, dass die Bücher konsistent sind.
5.1 Überprüfung der Finanzberichte
Erstellen Sie wichtige Finanzberichte aus sowohl QuickBooks als auch Beancount für dieselben Daten und vergleichen Sie sie:
-
Bilanz zum 31. Dezember 2023: Vergleichen Sie die Summen von Aktiva, Passiva und Eigenkapital Zeile für Zeile. Sie sollten übereinstimmen. Wenn QuickBooks zum Beispiel Gesamtvermögen = $150.000 und Gesamtkapital = $150.000 anzeigte, sollte die Beancount-Bilanz dieselben Summen zeigen. Wenn Sie Konten etwas anders strukturiert haben (z. B. einige Unterkonten zusammengelegt), passen Sie dies im Vergleich an oder gehen Sie eine Ebene tiefer, um sicherzustellen, dass die Summen gleich sind.
-
GuV 2019–2023: Stellen Sie sicher, dass die Gesamterträge, Gesamtaufwendungen und der Jahresüberschuss für jedes Jahr (oder den gesamten Bereich) identisch sind. Geringfügige Unterschiede könnten entstehen, wenn QuickBooks bei Berichten gerundet hat, aber Transaktionen führen normalerweise Cents exakt, sodass der Jahresüberschuss exakt sein sollte. Wenn der Gewinn eines Jahres abweicht, gehen Sie in die Daten dieses Jahres – oft ein Indikator für einen fehlenden oder doppelten Eintrag in diesem Zeitraum.
-
Differenzen in der Saldenbilanz: Erstellen Sie nach Möglichkeit eine Tabelle, in der Sie jedes Konto und den Saldo aus QuickBooks im Vergleich zu Beancount auflisten. Da wir erwarten, dass sie übereinstimmen, sollte dies eine Spalte mit lauter Nullen sein. Dies ist im Wesentlichen die Kreuzprüfung der Saldenbilanz, die wir besprochen haben, aber das Aufschreiben hilft bei der Dokumentation.
5.2 Beispielhafter Vergleich (Vorher vs. Nachher)
Unten ist ein Beispiel-Ausschnitt, der die Datenkonsistenz demonstriert. Nehmen wir an, unsere QuickBooks-Saldenbilanz für den 31. Dezember 2023 war:
Konto | QuickBooks-Saldo (31. Dez. 2023) |
---|---|
Aktiva | |
Assets:Bank:Girokonto | $12.500,00 (Soll) |
Assets:Forderungen | $3.200,00 (Soll) |
Passiva | |
Liabilities:Kreditkarte | $-1.200,00 (Haben) |
Liabilities:Darlehen | $-5.000,00 (Haben) |
Eigenkapital | |
Equity:Eröffnungsbilanz | $-7.500,00 (Haben) |
Equity:Gewinnrücklagen | $-2.000,00 (Haben) |
Equity:Laufender Gewinn | $0,00 |
In Beancount, nach dem Import und der Buchung aller Transaktionen bis 2023, gibt ein bean-report balances
(Saldenbilanz) aus:
Konto | Beancount-Saldo (31. Dez. 2023) |
---|---|
Aktiva | |
Assets:Bank:Girokonto | 12.500,00 USD (Soll) |
Assets:Forderungen | 3.200,00 USD (Soll) |
Passiva | |
Liabilities:Kreditkarte | -1.200,00 USD (Haben) |
Liabilities:Darlehen | -5.000,00 USD (Haben) |
Eigenkapital | |
Equity:Eröffnungsbilanz | -7.500,00 USD (Haben) |
Equity:Gewinnrücklagen | -2.000,00 USD (Haben) |
Equity:Gewinn (2019-2023) | 0,00 USD |
(Hinweis: Die Eigenkapitalabschnitte können unterschiedlich strukturiert sein; der Schlüssel ist, dass die Summen übereinstimmen. Hier spielt "Gewinn (2019-2023)" in Beancount die Rolle des laufenden Jahresgewinns/der kombinierten Gewinnrücklagen und zeigt Null an, weil der Gewinn in die Gewinnrücklagen abgeschlossen wurde.)
Wie gezeigt, stimmt jedes Konto auf den Cent genau überein. Die Summe der Soll-Beträge entspricht der Summe der Haben-Beträge auf beiden Seiten.
Wenn wir zusätzlich eine GuV für 2023 ausführen:
- QuickBooks: Erträge $50.000, Aufwendungen $48.000, Jahresüberschuss $2.000.
- Beancount: Erträge $50.000, Aufwendungen $48.000, Jahresüberschuss $2.000 (der dann in die Gewinnrücklagen abgeschlossen wurde oder im Eigenkapital in der Jahresendbilanz erscheint).
Sie können bei Bedarf einen Diff der Transaktionen erstellen, aber da QuickBooks-Daten nicht in Hauptbuchform vorliegen, ist es effektiver, sich auf Berichte zu verlassen. Man könnte sowohl die QuickBooks-CSV als auch die Beancount-Transaktionen nach Datum sortieren und Schlüsselfelder als letzte Überprüfung vergleichen (dies kann in Excel oder mit einem Skript erfolgen). Da wir jedoch unserer früheren Validierung vertrauen, ist die Überprüfung der Finanzberichte normalerweise ausreichend.
5.3 Tipps für die Prüfung
- Wenn ein Prüfer oder Stakeholder eine Bestätigung benötigt, präsentieren Sie die Vorher-Nachher-Finanzberichte nebeneinander. Die Transparenz von Beancount kann Audits tatsächlich vereinfachen, da Sie jede Zahl von einem Bericht schnell bis zum Quelldatensatz zurückverfolgen können (insbesondere mit der Drill-Down-Funktionalität von Fava).
- Bewahren Sie die QuickBooks-Sicherung und die exportierten CSVs als Teil Ihres Prüfpfads auf. Dokumentieren Sie alle während der Migration vorgenommenen Anpassungen (z. B. "Konto X in Y umbenannt für Konsistenz" oder "Transaktion Z in zwei Einträge aufgeteilt für Klarheit", falls Sie solche Änderungen vorgenommen haben).
- Implementieren Sie zukünftig regelmäßige Überprüfungen in Beancount. Zum Beispiel hilft die monatliche Abstimmung der Bankkonten und eine Zusicherung ihres Endbestands, Datenprobleme oder Eingabefehler zu erkennen. Die Migration bietet eine gute Ausgangsbasis; die Aufrechterhaltung der Disziplin im neuen System gewährleistet die fortlaufende Genauigkeit.
Schließlich feiern Sie den Abschluss der Migration: Sie haben fünf Jahre Buchhaltungsdaten erfolgreich von QuickBooks nach Beancount übertragen. Die Daten liegen nun in einem leichtgewichtigen, versionierbaren Textformat mit vollständiger doppelter Buchführungsintegrität vor. Sie haben die Daten exportiert, mit Python-Skripten transformiert, die Integrität durch Saldenbilanzen und Berichte validiert und sie in ein gut organisiertes Beancount-Hauptbuch übernommen. Dieser umfassende Prozess stellt sicher, dass das Beancount-Hauptbuch eine genaue, getreue Nachbildung Ihrer QuickBooks-Bücher über den Fünfjahreszeitraum ist und Sie für eine optimierte Buchhaltung in der Zukunft aufstellt.