Preskočiť na hlavný obsah

Jeden príspevok označené s "exportovanie údajov"

Zobraziť všetky značky

Manuál pre migráciu z QuickBooks do Beancount

· Čítanie na 29 minút
Mike Thrift
Mike Thrift
Marketing Manager

Fáza 1: Exportovanie údajov z QuickBooks

Migrácia údajov za päť rokov sa začína exportovaním všetkých záznamov z QuickBooks v použiteľnom formáte. QuickBooks Desktop a QuickBooks Online majú rôzne možnosti exportu:

2021-12-01-from-quickbooks-to-plain-text-a-migration-playbook

1.1 QuickBooks Desktop – Možnosti exportu

IIF (Intuit Interchange Format): QuickBooks Desktop dokáže exportovať zoznamy (ako účtovná osnova, zákazníci, dodávatelia) do textových súborov .IIF. V QuickBooks Desktop prejdite na File → Utilities → Export → Lists to IIF, potom vyberte zoznamy, ktoré potrebujete (napr. Chart of Accounts, Customers, Vendors). Týmto získate textový súbor, ktorý obsahuje názvy účtov, typy a údaje zo zoznamov. IIF je proprietárny, ale jednoduchý textový formát, ktorý sa pomerne ľahko spracováva. Použite ho na zachytenie vašej účtovnej osnovy a zoznamov kontaktov ako referencie v Beancount.

Hlavná kniha/Denník cez CSV: Pre transakčné údaje QuickBooks Desktop neposkytuje export všetkých údajov jedným kliknutím, ale môžete použiť reporty. Odporúčanou metódou je exportovať hlavný denník (všetky transakcie) za požadované časové obdobie. V QuickBooks Desktop otvorte Reports → Accountant & Taxes → Journal, nastavte dátumy od najskoršej transakcie po dnešok a kliknite na Export → Excel. Výsledok uložte ako CSV po odstránení všetkých hlavičiek/pätičiek reportu a prázdnych stĺpcov. Uistite sa, že numerické údaje sú čisté: zahrňte centy (napr. 3.00, nie 3), žiadne nadbytočné úvodzovky a žiadne symboly meny alebo dvojité záporné znamienka v CSV. CSV by mal mať stĺpce ako Date, Trans #, Name, Account, Memo, Debit, Credit, Balance (alebo jeden stĺpec Amount v závislosti od formátu reportu).

Tip: QuickBooks Desktop 2015+ môže tiež exportovať transakcie cez dialógové okno Find. Použite Edit → Find → Advanced, nastavte časový rozsah na päť rokov a potom exportujte výsledky do CSV. Upozornenie: Niektoré verzie obmedzujú export na 32 768 riadkov. Ak máte veľmi veľké dáta, exportujte ich rok po roku (alebo v menších častiach), aby ste sa vyhli skráteniu, a neskôr ich spojte. Uistite sa, že sa časové rozsahy neprekrývajú, aby ste predišli duplikátom.

Iné formáty (QBO/QFX/QIF): QuickBooks Desktop môže importovať bankové transakcie cez súbory .QBO (Web Connect) alebo .QFX/.OFX, ale pre export z QuickBooks tieto formáty nie sú typické. Ak je vaším cieľom extrahovať iba bankové transakcie, možno ich už máte vo formáte QBO/OFX od vašej banky. Avšak pre úplný export hlavnej knihy sa držte IIF a CSV. QuickBooks Desktop nemôže priamo exportovať do QIF (Quicken Interchange Format) bez nástrojov tretích strán. Ak nájdete spôsob, ako získať QIF, všimnite si, že niektoré nástroje pre hlavnú knihu (starší Ledger 2.x) dokázali čítať QIF, ale v našom postupe je lepšie pracovať s CSV.

1.2 QuickBooks Online – Možnosti exportu

Vstavaný export do Excel/CSV: QuickBooks Online (QBO) poskytuje nástroj Export Data. Prejdite na Settings ⚙ → Tools → Export Data. V dialógovom okne exportu použite kartu Reports na výber údajov (napr. General Ledger alebo Transaction List) a kartu Lists pre zoznamy (účtovná osnova atď.), vyberte All dates a exportujte do Excelu. QuickBooks Online stiahne ZIP súbor obsahujúci viacero Excel súborov pre vybrané reporty a zoznamy (napríklad Profit and Loss, Balance Sheet, General Ledger, Customers, Vendors, Chart of Accounts atď.). Tieto Excel súbory potom môžete previesť na CSV na ďalšie spracovanie.

Report s detailmi transakcií: Ak predvolený export QBO neobsahuje jeden súbor s hlavnou knihou, môžete manuálne spustiť podrobný report:

  1. Prejdite na Reports a nájdite Transaction Detail by Account (alebo General Ledger v niektorých verziách QBO).
  2. Nastavte Report period na celý päťročný rozsah.
  3. V možnostiach reportu nastavte Group by = None (aby sa zobrazili jednotlivé transakcie bez medzisúčtov).
  4. Prispôsobte stĺpce tak, aby obsahovali aspoň: Date, Transaction Type, Number, Name (Payee/Customer), Memo/Description, Account, Debit, Credit (alebo jeden stĺpec Amount) a Balance. Zahrňte aj triedu alebo lokalitu, ak sa používajú.
  5. Spustite report a potom Export to Excel.

Týmto získate podrobnú hlavnú knihu všetkých transakcií. Uložte ju ako CSV. Každý riadok bude predstavovať jeden rozpis (zápis) transakcie. Neskôr budete musieť zoskupiť riadky podľa transakcií na konverziu.

Účtovná osnova a ďalšie zoznamy: QuickBooks Online môže exportovať účtovnú osnovu cez Accounting → Chart of Accounts → Batch Actions → Export to Excel. Urobte to, aby ste získali názvy a typy účtov. Podobne exportujte zákazníkov, dodávateľov atď., ak chcete preniesť názvy pre metadáta.

QuickBooks Online API (voliteľné): Pre programátorský prístup Intuit poskytuje REST API pre údaje QBO. Pokročilí používatelia si môžu vytvoriť aplikáciu QuickBooks Online (vyžaduje si vývojársky účet) a použiť API na získanie údajov vo formáte JSON. Napríklad, môžete sa dotazovať na koncový bod Account pre účtovnú osnovu a na koncové body reportov JournalEntry alebo GeneralLedger pre transakcie. Existujú Python SDK ako python-quickbooks, ktoré obaľujú API. Avšak použitie API zahŕňa OAuth autentifikáciu a je pre jednorazovú migráciu zbytočne zložité, pokiaľ nepreferujete automatizáciu. Pre väčšinu prípadov je manuálny export do CSV/Excelu jednoduchší a menej náchylný na chyby.


Fáza 2: Transformácia a čistenie údajov

Keď máte údaje z QuickBooks vo formáte CSV (a/alebo IIF), ďalším krokom je ich konverzia do formátu textového denníka Beancount. To zahŕňa spracovanie exportov, mapovanie účtov QuickBooks na účtovnú osnovu Beancount a formátovanie transakcií v syntaxi Beancount.

2.1 Spracovanie exportov z QuickBooks pomocou Pythonu

Použitie Pythonu zabezpečí presnosť a reprodukovateľnosť transformácie. Načrtneme skripty pre dve kľúčové úlohy: importovanie účtovnej osnovy a konverziu transakcií.

Import a mapovanie účtov: Je kľúčové nastaviť si účty v Beancount pred pridaním transakcií. Účty v QuickBooks majú typy (Bank, Accounts Receivable, Expense atď.), ktoré zmapujeme na hierarchiu Beancount (Assets, Liabilities, Income, Expenses atď.). Môžeme použiť napríklad takéto mapovanie:

# Mapovanie typu účtu QuickBooks na koreňovú kategóriu Beancount
AccountTypeMap = {
'BANK': 'Assets',
'CCARD': 'Liabilities',
'AR': 'Assets', # Pohľadávky ako aktíva
'AP': 'Liabilities', # Záväzky ako pasíva
'FIXASSET': 'Assets',
'OASSET': 'Assets', # Ostatné aktíva
'OCASSET': 'Assets', # Ostatné bežné aktíva
'LTLIAB': 'Liabilities', # Dlhodobé záväzky
'OCLIAB': 'Liabilities', # Ostatné bežné záväzky
'EQUITY': 'Equity',
'INC': 'Income',
'EXP': 'Expenses',
'EXINC': 'Income', # Ostatné výnosy
'EXEXP': 'Expenses', # Ostatné náklady
}

Použitím exportu IIF z QuickBooks Desktop alebo CSV so zoznamom účtov z QBO získame názov a typ každého účtu. Potom:

  • Vytvorte názvy účtov Beancount: QuickBooks niekedy používa dvojbodky (:) v názvoch účtov na označenie podúčtov (napr. „Current Assets:Checking). Beancount používa rovnakú notáciu s dvojbodkou pre hierarchiu. Často môžete názov použiť priamo. Ak názvy účtov v QuickBooks nezačínajú kategóriou, pridajte na začiatok zmapovanú kategóriu. Napríklad účet QuickBooks typu BANK s názvom "Checking" sa v Beancount stane Assets:Checking. Účet EXP (náklady) "Meals" sa stane Expenses:Meals, atď.

  • Zabezpečte platné pomenovanie: Odstráňte alebo nahraďte všetky znaky, ktoré by mohli Beancount zmiasť. QuickBooks povoľuje znaky ako & alebo / v názvoch. Je rozumné odstrániť alebo nahradiť špeciálne znaky (napr. nahradiť & za and, odstrániť lomky alebo medzery). Taktiež zabezpečte, aby boli všetky názvy účtov po transformácii jedinečné – QuickBooks mohol povoliť rovnaký názov podúčtu pod rôznymi nadradenými účtami, čo je v poriadku, ale v Beancount musí byť plný názov (s nadradenými účtami) jedinečný. Ak je to potrebné, premenujte alebo pridajte kvalifikátor na ich rozlíšenie.

  • Výstup otvorení účtov: V Beancount musí byť každý použitý účet otvorený pomocou direktívy open. Môžete si zvoliť dátum pred prvou transakciou (napr. ak migrujete údaje z rokov 2019–2023, použite 2018-12-31 alebo ešte skorší dátum pre všetky otvorenia). Skript zapíše riadky ako: 2018-12-31 open Assets:Checking USD 2018-12-31 open Expenses:Meals USD pre každý účet (za predpokladu, že USD je hlavná mena). Použite príslušnú menu pre každý účet (pozri poznámky o viacerých menách nižšie).

Konverzia transakcií: Hlavnou výzvou je konverzia exportu transakcií z QuickBooks (CSV) na položky Beancount. Každá transakcia v QuickBooks (faktúra, účet, šek, denníkový zápis atď.) môže mať viacero rozpisov (riadkov), ktoré musia byť zoskupené do jednej transakcie Beancount.

Použijeme čítačku CSV v Pythone na iteráciu cez exportované riadky a akumuláciu rozpisov:

import csv
from collections import defaultdict

# Načítanie všetkých riadkov z CSV denníka QuickBooks
rows = []
with open('quickbooks_exported_journal.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)

# Zoskupenie riadkov podľa transakcie (za predpokladu, že 'Trans #' identifikuje transakcie)
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)

Teraz je transactions slovník, kde každý kľúč je ID/číslo transakcie a hodnota je zoznam rozpisov pre túto transakciu. Ďalej prevedieme každú skupinu do formátu Beancount:

def format_date(qb_date):
# Dátumy v QuickBooks môžu byť vo formáte "12/31/2019"
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"

output_lines = []
for trans_id, splits in transactions.items():
# Zoradenie rozpisov podľa poradia riadkov, ak je to potrebné (zvyčajne sú už v poradí)
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()
# Hlavička transakcie
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # zahrnutie referenčného čísla, ak je dostupné
output_lines.append(f" number: \"{first['Num']}\"")
# Prechádzanie každým rozpisom/zápisom
for split in splits:
acct_name = split['Account'].strip()
# Mapovanie názvu účtu QuickBooks na účet Beancount (pomocou predchádzajúceho mapovania)
beancount_acct = account_map.get(acct_name, acct_name)
# Určenie sumy so znamienkom:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# Niektoré exporty majú jeden stĺpec Amount (záporný pre kredity)
amt_str = amount
else:
# Ak sú samostatné stĺpce Debit/Credit
amt_str = debit if debit else f"-{credit}"
# Pre istotu odstránenie čiarok v číslach
amt_str = amt_str.replace(",", "")
# Pridanie meny
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# Poznámka/popis pre rozpis
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# Koniec transakcie – prázdny riadok
output_lines.append("")

Logika tohto skriptu robí nasledovné:

  • Formátuje dátum na YYYY-MM-DD pre Beancount.

  • Používa príjemcu (Name) a poznámku (Memo) pre popis transakcie. Napríklad: 2020-05-01 * "ACME Corp" "Platba faktúry" (Ak nie je uvedený príjemca, môžete použiť typ transakcie z QuickBooks alebo nechať príjemcu v prázdnych úvodzovkách).

  • Pridáva metadáta number, ak existuje referenčné číslo (číslo šeku, faktúry atď.).

  • Iteruje cez každý riadok rozpisu:

    • Mapuje názov účtu QuickBooks na účet Beancount pomocou slovníka account_map (naplneného z kroku s účtovnou osnovou).
    • Určuje sumu. V závislosti od vášho exportu môžete mať jeden stĺpec Amount (s kladnými/zápornými hodnotami) alebo samostatné stĺpce Debit a Credit. Kód vyššie zvláda oba prípady. Zabezpečuje, že kredity (strana Dal) sú reprezentované ako záporné sumy pre Beancount (keďže v Beancount sa pre každý zápis používa jedno číslo so znamienkom).
    • Pripojí menu (predpokladá sa USD, pokiaľ nie je prítomný stĺpec s inou menou).
    • Zapíše riadok zápisu Beancount s účtom, sumou a komentárom s poznámkou z riadku. Napríklad: Assets:Checking 500.00 USD ; Deposit Income:Sales -500.00 USD ; Deposit Toto odráža vklad 500 USD (z príjmu na bežný účet).
  • Po vymenovaní všetkých rozpisov oddeľuje transakciu prázdny riadok.

Spracovanie viacerých mien: Ak vaše údaje v QuickBooks obsahujú viacero mien, zahrňte kód meny pri každom zápise (ako je uvedené vyššie). Uistite sa, že účty, ktoré sú v cudzích menách, sú otvorené s touto menou. Napríklad, ak máte bankový účet v EUR, mali by ste zadať open Assets:Bank:Checking EUR a transakcie na tomto účte budú používať EUR. Beancount podporuje denníky s viacerými menami a bude sledovať implicitné konverzie, ale možno budete musieť pridať cenové záznamy pre výmenné kurzy, ak chcete konverziu na základnú menu v reportoch. Odporúča sa tiež deklarovať hlavnú operačnú menu na začiatku súboru Beancount (napr. option "operating_currency" "USD").

Spustenie konverzie: Uložte Python skript (napríklad ako qb_to_beancount.py) a spustite ho na svojich exportovaných súboroch. Mal by vyprodukovať súbor .beancount obsahujúci všetky účty a transakcie.

2.2 Riešenie okrajových prípadov a čistenie údajov

Počas transformácie dávajte pozor na tieto bežné úskalia a ako ich riešiť:

  • Nesúlad názvov účtov: QuickBooks môže mať názvy účtov, ktoré sú v konflikte s hierarchickými názvami Beancount. Napríklad, QuickBooks môže mať dva rôzne nadradené účty, každý s podúčtom s názvom "Poistenie". V Beancount musí byť Expenses:Insurance jedinečný. Vyriešte to premenovaním jedného z nich (napr. "Poistenie-Vozidlo" vs. "Poistenie-Zdravotne") pred exportom alebo ich zmapujte na jedinečné účty Beancount vo vašom skripte. Konzistentné konvencie pomenovania (žiadne špeciálne znaky a použitie hierarchie) vám ušetria bolesti hlavy. V prípade potreby použite prístup s premapovacím súborom: udržiavajte CSV alebo slovník starého názvu → nový názov Beancount a aplikujte ho počas konverzie (náš príkladový kód používa account_map a mohol by načítať prepisy zo súboru).

  • Dátumy a formáty: Uistite sa, že všetky dátumy sú konzistentne formátované. Skript vyššie normalizuje M/D/Y na ISO formát. Taktiež dávajte pozor na problémy s fiškálnym vs. kalendárnym rokom, ak váš päťročný rozsah prekračuje koniec roka. Beancount sa nestará o hranice fiškálneho roka, ale neskôr možno budete chcieť rozdeliť súbory podľa rokov pre pohodlie.

  • Numerická presnosť: QuickBooks pracuje s menou na centy, takže práca v centoch je zvyčajne v poriadku. Všetky sumy by ideálne mali mať dve desatinné miesta v CSV. Ak sa nejaké sumy zmenili na celé čísla (bez desatinnej časti) alebo majú čiarky/zátvorky (pre záporné hodnoty), vyčistite ich v skripte (odstráňte čiarky, preveďte (100.00) na -100.00, atď.). Export CSV, ak je vykonaný správne (podľa pokynov), by sa mal týmto problémom s formátovaním vyhnúť.

  • Záporné sumy a znamienka: Reporty v QuickBooks niekedy zobrazujú záporné hodnoty ako -100.00 alebo (100.00) alebo dokonca --100.00 v niektorých exportoch do Excelu. Krok čistenia by mal tieto prípady zvládnuť. Uistite sa, že strany Má dať (debit) a Dal (credit) každej transakcie sa vynulujú. Beancount to bude vynucovať (ak nie je vyrovnaná, pri importe vyhodí chybu).

  • Duplicitné transakcie: Ak ste museli exportovať transakcie v dávkach (napr. rok po roku alebo účet po účte), dávajte pozor, aby ste ich zlúčili bez prekrytia. Skontrolujte, či prvá transakcia jedného roka nie je zároveň poslednou z predchádzajúcej dávky, atď. Je ľahké omylom duplikovať niekoľko transakcií na hraniciach. Ak máte podozrenie na duplikáty, môžete zoradiť výsledné položky Beancount podľa dátumu a hľadať identické položky, alebo použiť jedinečné značky transakcií Beancount na ich odhalenie. Jednou stratégiou je zahrnúť čísla transakcií z QuickBooks ako metadáta (napr. použiť Trans # alebo číslo faktúry ako značku txn alebo metadáta quickbooks_id) a potom zabezpečiť, aby neexistovali žiadne duplikáty týchto ID.

  • Nevyrovnané rozpisy / Prechodné účty: QuickBooks môže mať zvláštne prípady, ako transakciu s nevyrovnanosťou, ktorú QuickBooks automaticky upravil na účet „Opening Balance Equity“ alebo „Retained Earnings“. Napríklad pri nastavovaní počiatočných zostatkov účtov QuickBooks často zaúčtuje rozdiely na účet vlastného imania. Tieto sa objavia v exportovaných transakciách. Beancount bude vyžadovať explicitné vyrovnanie. Možno budete musieť zaviesť účet vlastného imania pre počiatočné zostatky (bežne Equity:Opening-Balances), aby ste zrkadlili QuickBooks. Je dobrým zvykom mať na prvý deň vášho denníka položku počiatočných zostatkov, ktorá stanoví počiatočné zostatky všetkých účtov (pozri Fázu 5).

  • Okrajové prípady viacerých mien: Ak používate viacero mien, export z QuickBooks môže uvádzať všetky sumy v domácej mene alebo v ich natívnej mene. Ideálne je získať údaje v natívnej mene pre každý účet (reporty z QuickBooks Online to zvyčajne robia). V Beancount každý zápis nesie menu. Ak QuickBooks poskytol výmenné kurzy alebo konverziu na domácu menu, môžete ich ignorovať a spoľahnúť sa na cenové záznamy Beancount. Ak QuickBooks neexportoval výmenné kurzy, možno budete chcieť manuálne pridať cenové záznamy (napr. pomocou direktívy price v Beancount) pre kľúčové dátumy, aby sa zhodovalo ocenenie. Avšak pre základnú integritu denníka stačí, že transakcie sa vyrovnávajú vo svojich pôvodných menách – nerealizované zisky/straty nemusia byť explicitne zaznamenané, pokiaľ nechcete rovnaké reporty.

  • Pohľadávky / Záväzky: QuickBooks sleduje detaily faktúr a účtov (dátumy splatnosti, stav platby atď.), ktoré sa v jednoduchom denníku úplne neprenesú. Získate transakcie pohľadávok (A/R) a záväzkov (A/P) (faktúry zvyšujúce A/R, platby znižujúce A/R atď.), ale nie dokumenty faktúr alebo zostatky zákazníkov podľa faktúr. V dôsledku toho by ste po migrácii mali overiť, že zostatky vašich účtov A/R a A/P v Beancount sa rovnajú otvoreným zostatkom zákazníkov/dodávateľov v QuickBooks. Ak potrebujete sledovať faktúry, môžete použiť metadáta Beancount (napr. zahrnúť značku invoice alebo odkaz). Čísla faktúr z QuickBooks by sa mali preniesť v poliach Num alebo Memo – náš skript zachováva Num ako number: "..." v metadátach transakcie.

  • Neaktívne alebo zrušené účty: Export IIF môže obsahovať neaktívne účty (ak ste sa rozhodli ich zahrnúť). Je v poriadku ich importovať (budú mať len nulový zostatok, ak boli skutočne neaktívne, a žiadne transakcie). Po poslednom dátume transakcie ich môžete v Beancount označiť ako uzavreté pomocou direktívy close. To udržuje váš denník uprataný. Napríklad: 2023-12-31 close Expenses:OldAccount ; zrušený po migrácii Toto je voliteľné a slúži hlavne na čistotu.

Dôkladným čistením a mapovaním údajov, ako je uvedené vyššie, získate súbor denníka Beancount, ktorý štrukturálne zrkadlí vaše údaje z QuickBooks. Ďalším krokom je overenie, či aj numericky zrkadlí QuickBooks.


Fáza 3: Validácia a odsúhlasenie údajov

Validácia je kritickou fázou pri migrácii účtovných údajov. Musíme zabezpečiť, aby sa denník Beancount zhodoval s účtovnými knihami QuickBooks do posledného centu. Možno použiť niekoľko stratégií a nástrojov:

3.1 Odsúhlasenie pomocou súvahovej skúšky (predvahy)

Report súvahovej skúšky (predvahy) uvádza konečné zostatky všetkých účtov (s uvedením strany Má dať a Dal alebo kladných/záporných hodnôt) a mal by sa vynulovať. Spustenie súvahovej skúšky v oboch systémoch pre rovnaký dátum je najrýchlejší spôsob, ako potvrdiť celkovú presnosť.

  • V QuickBooks: Spustite report Trial Balance pre posledný deň posledného roka (napr. 31. decembra 2023). Tento report zobrazuje zostatok každého účtu. Exportujte ho alebo si poznačte kľúčové čísla.

  • V Beancount: Použite reportovanie v Beancount na vygenerovanie súvahovej skúšky. Jedna jednoduchá metóda je cez príkazový riadok:

    bean-report migrated.beancount balances

    Report balances je súvahová skúška uvádzajúca všetky účty a ich zostatky. Môžete tiež otvoriť súbor vo Fava (webové rozhranie Beancount) a pozrieť sa do sekcie Balances alebo Balance Sheet. Zostatok každého účtu v Beancount by sa mal zhodovať so súvahovou skúškou z QuickBooks. Napríklad, ak QuickBooks ukazuje Pohľadávky = 5 000 USD, potom účet Assets:Accounts Receivable v Beancount by mal mať celkovú sumu 5 000 USD (Má dať). Ak Výnosy z predaja = 200 000 USD, účet Income:Sales v Beancount by mal ukazovať 200 000 USD (Dal, čo sa môže zobraziť ako -200 000, ak používate súvahovú skúšku, ktorá prezentuje stranu Dal ako záporné hodnoty).

Ak existujú nezrovnalosti, nájdite ich:

  • Skontrolujte, či celý účet chýba alebo je navyše (zabudli sme na nejaký účet alebo sme zahrnuli taký, ktorý bol už pred migračným obdobím zrušený?).
  • Ak je zostatok nesprávny, prejdite do detailov: QuickBooks môže spustiť Account QuickReport alebo detail hlavnej knihy pre daný účet a môžete to porovnať s registrom Beancount pre daný účet (bean-report migrated.beancount register -a NazovUctu). Niekedy rozdiely pochádzajú z chýbajúcej transakcie alebo duplikátu.

Taktiež overte, že súčet všetkých účtov je v súvahovej skúške Beancount nula (vypíše sa celkový súčet, ktorý by mal byť nula alebo veľmi blízko nuly). Beancount vynucuje podvojné účtovníctvo, takže ak máte akúkoľvek nenulovú nevyrovnanosť, znamená to, že aktíva mínus pasíva-vlastné imanie sa nevynulovali, čo naznačuje problém (čo by QuickBooks normálne tiež nepovolil, ale mohlo by sa stať, ak by boli niektoré údaje vynechané).

3.2 Porovnanie zostatkov na účtoch

Okrem súvahovej skúšky môžete porovnať konkrétne finančné výkazy:

  • Súvaha: Spustite súvahu v QuickBooks pre konečný dátum a súvahu v Beancount (bean-report migrated.beancount balsheet). Je to podobné ako súvahová skúška, ale organizované podľa aktív, pasív a vlastného imania. Čísla by sa mali zhodovať po kategóriách. Pre podrobnejšiu kontrolu porovnajte celkové sumy hlavných účtov: hotovosť, pohľadávky, dlhodobý majetok, záväzky, vlastné imanie atď.

  • Výkaz ziskov a strát: Spustite výkaz ziskov a strát za päťročné obdobie (alebo rok po roku) v QuickBooks a v Beancount (bean-report migrated.beancount income pre výkaz ziskov a strát za celé obdobie). Čistý zisk z Beancount by sa mal rovnať QuickBooks pre každé obdobie. Ak ste migrovali všetkých päť rokov, kumulatívny čistý zisk by sa mal zhodovať. Môžete tiež porovnať jednotlivé celkové výnosy a náklady, aby ste sa uistili, že žiadna kategória nebola vynechaná alebo zdvojená.

  • Náhodné vzorkovanie transakcií: Vyberte niekoľko náhodných transakcií (najmä z každého roka a každého hlavného účtu) a overte, či boli správne migrované. Napríklad, nájdite faktúru spred 3 rokov v QuickBooks a potom vyhľadajte jej sumu alebo poznámku v súbore Beancount (keďže všetky transakcie sú textové, môžete otvoriť súbor .beancount v textovom editore alebo použiť vyhľadávacie nástroje). Skontrolujte, či sa dátum, sumy a účty zhodujú. To pomáha odhaliť akékoľvek problémy s formátovaním dátumu alebo nesprávne zmapované účty.

3.3 Automatizované kontroly integrity

Využite vlastné nástroje na validáciu v Beancount:

  • bean-check: Spustite bean-check migrated.beancount. Tento príkaz spracuje súbor a nahlási akékoľvek chyby v syntaxi alebo vyrovnaní. Ak skript niečo prehliadol, napríklad neotvorený účet alebo nevyrovnanú transakciu, bean-check to označí. Čistý prechod (žiadny výstup) znamená, že súbor je aspoň vnútorne konzistentný.

  • Tvrdenia o zostatku: Môžete pridať explicitné tvrdenia o zostatku (balance assertions) v denníku pre kľúčové účty ako dodatočnú kontrolu. Napríklad, ak poznáte zostatok na bankovom účte k určitému dátumu, pridajte riadok: 2023-12-31 balance Assets:Bank:Checking 10000.00 USD Potom bean-check zabezpečí, že v denníku k danému dátumu je zostatok skutočne 10 000 USD. Je to voliteľné, ale môže byť užitočné pre veľmi dôležité účty. Mohli by ste vziať konečné zostatky z QuickBooks (napr. na konci každého roka) a potvrdiť ich v súbore Beancount. Ak nejaké tvrdenie zlyhá, Beancount nahlási rozdiel.

  • Postupná kontrola súvahovej skúšky: Ak preferujete, môžete vykonať kontrolu po obdobiach. Pre každý rok porovnajte čistú zmenu. Napríklad, čistý zisk v QuickBooks 2020 vs. Beancount 2020 atď., aby ste sa uistili, že každý rok sa správne uzavrel do vlastného imania (QuickBooks automaticky presúva čistý zisk do nerozdeleného zisku každý nový rok; v Beancount uvidíte len kumulatívne vlastné imanie). Ak uvidíte rozdiely, môže to naznačovať problém v údajoch konkrétneho roka.

  • Počty transakcií a duplikáty: Spočítajte počet transakcií v QuickBooks vs. Beancount. QuickBooks nezobrazuje priamy počet ľahko, ale môžete to odhadnúť spočítaním riadkov v CSV (každá hlavička transakcie vs. rozpisy). V Beancount je rýchly spôsob spočítať výskyty txn alebo * " v súbore. Mali by byť rovnaké alebo o niečo vyššie ako v QuickBooks (ak ste pridali transakcie počiatočných zostatkov alebo úpravy). Významný nesúlad znamená, že niečo mohlo byť vynechané alebo duplikované. Naše použitie jedinečných ID v metadátach môže pomôcť: ak máte podozrenie na duplikáty, prehľadajte súbor Beancount a hľadajte rovnaké číslo šeku alebo faktúry, ktoré sa objavuje dvakrát, hoci by nemalo.

  • Stav odsúhlasenia: V našom skripte sme zahrnuli metadáta rec: "y" alebo "n" na základe stavu odsúhlasenia v QuickBooks (ako rec v príklade). Toto nie je štandardná funkcia Beancount (Beancount nesleduje odsúhlasené/čakajúce položky rovnakým spôsobom ako Ledger), ale môže to byť užitočná metadáta. Môžete overiť, či sú prítomné všetky transakcie, ktoré boli odsúhlasené v QuickBooks. Nakoniec, opätovné odsúhlasenie bankových účtov v Beancount (pomocou vašich výpisov) by mohlo byť konečným dôkazom, že nič nechýba.

Vykonaním týchto validácií si vybudujete dôveru, že migrácia zachovala údaje. Venujte tejto fáze dostatok času – je ľahšie opraviť anomálie teraz ako o mesiace neskôr, keď sa už na účtovné knihy bude spoliehať. Bežné problémy pri zlyhaní validácie: chýbajúci počiatočný zostatok účtu, transakcia s dátumom mimo rozsahu alebo obrátené znamienko pri zápise. Všetky sú po identifikácii opraviteľné.


Fáza 4: Finalizácia a zápis do denníka Beancount

Po vyčistení a validácii je čas formalizovať údaje do štruktúry denníka Beancount. „Finalizácia“ tu znamená dokončenie súborov denníka a potenciálne ich uloženie do systému správy verzií pre auditovateľnosť.

4.1 Organizácia súborov denníka a konfigurácie

Rozhodnite sa, ako štruktúrovať súbory denníka Beancount. Pre päť rokov údajov môžete všetko nechať v jednom súbore alebo ich rozdeliť podľa rokov alebo kategórií. Bežná a prehľadná štruktúra je:

  • Hlavný súbor denníka: napr. ledger.beancount – Toto je vstupný bod, ktorý môže include (zahŕňať) ďalšie súbory. Môže obsahovať globálne možnosti a potom zahŕňať ročné súbory.
  • Súbor s účtami: Definujte účtovnú osnovu a počiatočné zostatky. Napríklad, accounts.beancount so všetkými direktívami open (ako ich vygeneroval skript). Tu môžete tiež uviesť komodity (meny).
  • Súbory s transakciami: Jeden na každý rok, napr. 2019.beancount, 2020.beancount, atď., obsahujúce transakcie pre daný rok. Týmto sa každý súbor udrží v zvládnuteľnej veľkosti a umožňuje vám zamerať sa na jeden rok, ak je to potrebné. Alternatívne ich môžete rozdeliť podľa subjektu alebo účtu, ale časové delenie je pre finančné údaje jednoduché.

Príklad hlavného súboru:

option "title" "Môj firemný denník"
option "operating_currency" "USD"

include "accounts.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"

Týmto spôsobom sa všetky údaje agregujú pri spúšťaní reportov, ale udržiavate si poriadok.

Beancount nevyžaduje viacero súborov – môžete mať jeden veľký súbor – ale vyššie uvedená štruktúra zlepšuje prehľadnosť a správu verzií. Podľa osvedčených postupov Beancount je dobré používať jasné hlavičky sekcií a logicky zoskupovať súvisiace položky.

4.2 Nastavenie počiatočných zostatkov a vlastného imania

Ak vaša migrácia nezačína od absolútnej nuly, budete musieť riešiť počiatočné zostatky. Dva scenáre:

  • Účtovníctvo začínajúce od nuly: Ak päťročné obdobie začína pri založení podniku (napr. začali ste používať QuickBooks v januári 2019 so všetkými účtami na nule okrem počiatočného vlastného imania), potom možno nebudete potrebovať samostatnú transakciu počiatočných zostatkov. Prvé transakcie v roku 2019 (ako počiatočné financovanie na bankový účet) prirodzene vytvoria počiatočné zostatky. Len sa uistite, že akýkoľvek počiatočný kapitál alebo predchádzajúci nerozdelený zisk sú zaúčtované cez transakcie vlastného imania.

  • Účtovníctvo v priebehu (čiastočná história): Ak ste začali s QuickBooks skôr a rok 2019 je stredobodom, potom k 1. januáru 2019 mal každý účet prenesený zostatok. QuickBooks by ich mal ako počiatočné zostatky alebo nerozdelený zisk. V Beancount je typické vytvoriť položku počiatočných zostatkov deň pred začiatkom vášho obdobia:

    • Použite účet vlastného imania s názvom Equity:Opening-Balances (alebo podobne) na vyrovnanie súčtu všetkých počiatočných súm.
    • Príklad: ak k 31.12.2018 bola hotovosť 10 000 USD, pohľadávky 5 000 USD a záväzky 3 000 USD (strana Dal), napísali by ste transakciu: 2018-12-31 * "Počiatočné zostatky" Assets:Cash 10000.00 USD Assets:AccountsReceivable 5000.00 USD Liabilities:AccountsPayable -3000.00 USD Equity:Opening-Balances -12000.00 USD Týmto zostane účet Opening-Balances so záporným súčtom (–12k USD), čo vyrovná položku. Teraz všetky účty aktív/pasív začínajú rok 2019 so správnymi zostatkami. Toto by malo zrkadliť akýkoľvek „Nerozdelený zisk“ alebo prenesené zostatky z QuickBooks.
    • Alternatívne použite direktívy pad a balance v Beancount: Pre každý účet môžete použiť pad z účtu Opening-Balances a potvrdiť zostatok. Je to automatizovanejší spôsob. Napríklad: 2018-12-31 pad Assets:Cash Equity:Opening-Balances 2018-12-31 balance Assets:Cash 10000.00 USD Toto povie Beancount, aby vložil akúkoľvek potrebnú položku (na účet Opening-Balances), aby bola hotovosť k danému dátumu 10 000 USD. Urobte to pre každý účet. Výsledok je podobný, ale napísanie explicitnej transakcie ako v prvej metóde je tiež jednoduché.
  • Nerozdelený zisk: QuickBooks explicitne neexportuje transakciu „Nerozdelený zisk“ – iba ho vypočíta. Po migrácii si môžete všimnúť, že Equity:Retained Earnings je nula, ak ste ho nevytvorili. V Beancount je nerozdelený zisk len ziskom z predchádzajúcich rokov. Môžete si vybrať vytvorenie účtu Nerozdelený zisk a previesť do neho zisky z predchádzajúcich rokov prvý deň každého nového roka, alebo jednoducho nechať vlastné imanie byť súčtom všetkých príjmov/nákladov (čo sa objaví v sekcii Vlastné imanie v reportoch). Pre transparentnosť niektorí používatelia ročne účtujú uzávierkové položky. Je to voliteľné a slúži hlavne na prezentáciu. Keďže sme migrovali všetky transakcie, zisk za každý rok sa prirodzene zvinie, ak spustíte report pre každý rok.

  • Porovnávacie kontroly: Po nastavení počiatočných zostatkov spustite súvahu k začiatočnému dátumu, aby ste sa uistili, že je všetko správne (mala by ukazovať tieto počiatočné zostatky oproti počiatočnému vlastnému imaniu, ktoré sa vynulujú).

4.3 Finalizácia a správa verzií

Teraz, keď sú údaje vo formáte Beancount a štruktúrované, je rozumné uložiť súbory do repozitára systému správy verzií (napr. git). Každá zmena v denníku môže byť sledovaná a máte auditnú stopu všetkých úprav. Toto je hlavná výhoda textového účtovníctva. Napríklad v QuickBooks nemusia byť zmeny ľahko porovnateľné, ale v Beancount môžete vidieť rozdiely riadok po riadku. Ako poznamenávajú niektorí používatelia, s Beancount získate transparentnosť a schopnosť vrátiť zmeny, ak je to potrebné – každá položka môže byť viazaná na históriu zmien.

Zvážte označenie commitu tejto počiatočnej migrácie ako v1.0 alebo podobne, aby ste vedeli, že predstavuje stav účtovných kníh tak, ako boli importované z QuickBooks. V budúcnosti budete zadávať nové transakcie priamo do Beancount (alebo ich importovať z bankových výpisov atď.) a môžete používať bežné postupy vývoja softvéru (commitovanie mesačne alebo denne, používanie vetiev na experimenty atď.).

Nastavenie Fava alebo iných nástrojov: Fava je webové rozhranie pre Beancount, ktoré uľahčuje prezeranie reportov. Po commite spustite fava ledger.beancount, aby ste si prezreli finančné výkazy a porovnali ich s vašimi reportami z QuickBooks ešte raz. V používateľskom rozhraní si môžete ľahšie všimnúť malé rozdiely (napríklad účet, ktorý by mal byť na nule, ale ukazuje malý zostatok, naznačuje chýbajúcu uzávierkovú položku alebo zblúdilú transakciu).

Konvencie pomenovania a konzistencia: Teraz máte plnú kontrolu, takže zabezpečte konzistenciu:

  • Všetky účty by mali mať jasné názvy, začínajúce veľkými písmenami názvov kategórií (Assets, Liabilities atď.). Ak niektoré vyzerajú zvláštne (napr. Assets:assets:SomeAccount kvôli nesúladu veľkosti písmen z QuickBooks), premenujte ich v súbore s účtami a aktualizujte transakcie (rýchle nájdenie/nahradenie v súbore to dokáže, alebo použite bean-format v Beancount alebo multi-kurzor editora).
  • Symboly komodít (kódy mien) by mali byť konzistentné. Pre USD používajte všade USD (nie $ alebo US$). Pre ostatné používajte štandardné kódy (EUR, GBP atď.). Táto konzistencia je dôležitá pre vyhľadávanie cien a reporty v Beancount.
  • Odstráňte akékoľvek dočasné alebo fiktívne účty, ktoré mohli byť vytvorené (napríklad, ak ste v skripte použili Expenses:Miscellaneous pre neznáme účty ako záchytnú sieť, pokúste sa ich eliminovať správnym zmapovaním všetkých účtov).

Ukončenie práce s QuickBooks: V tomto bode by ste mali mať paralelné účtovné knihy v Beancount, ktoré sa zhodujú s QuickBooks. Niektorí sa rozhodnú prevádzkovať oba systémy paralelne na krátke obdobie, aby sa uistili, že nič nebolo vynechané. Ale ak je validácia solídna, môžete „uzavrieť“ účtovné knihy v QuickBooks:

  • Ak ide o firemné prostredie, zvážte export všetkých zdrojových dokumentov z QuickBooks (faktúry, účty, potvrdenky) pre záznamy, keďže tieto v Beancount nebudú existovať, pokiaľ ich nepripojíte manuálne.
  • Uchovajte si zálohu údajov z QuickBooks (súbor spoločnosti aj exportované súbory).
  • V budúcnosti udržiavajte denník Beancount ako primárny systém záznamov.

Uložením údajov do denníka Beancount ste dokončili migračný proces. Posledným krokom je vykonanie auditu a preukázanie konzistentnosti finančných výkazov, aby ste uspokojili seba (a akýchkoľvek zainteresovaných strán alebo audítorov), že migrácia bola úspešná.


Fáza 5: Audit po migrácii a príklady

Na ilustráciu úspechu migrácie pripravte porovnanie finančných výkazov pred a po a prípadne porovnanie rozdielov v transakciách. Toto poskytne dôkaz, že účtovné knihy sú konzistentné.

5.1 Overenie finančných výkazov

Vytvorte kľúčové finančné reporty z QuickBooks aj Beancount pre rovnaké dátumy a porovnajte ich:

  • Súvaha k 31. decembru 2023: Porovnajte celkové sumy aktív, pasív a vlastného imania riadok po riadku. Mali by sa zhodovať. Napríklad, ak QuickBooks ukázal Celkové aktíva = 150 000 USD a Celkové pasíva + Vlastné imanie = 150 000 USD, súvaha Beancount by mala ukazovať rovnaké celkové sumy. Ak ste účty štruktúrovali trochu inak (povedzme, že ste zlúčili niektoré podúčty), zohľadnite to pri porovnaní alebo rozdeľte na ďalšiu úroveň, aby ste sa uistili, že súčty sú rovnaké.

  • Výkaz ziskov a strát 2019–2023: Uistite sa, že celkové príjmy, celkové náklady a čistý zisk za každý rok (alebo za celý rozsah) sú identické. Menšie rozdiely by mohli vzniknúť, ak QuickBooks robil nejaké zaokrúhľovanie v reportoch, ale transakcie zvyčajne nesú centy presne, takže čistý zisk by mal byť presný. Ak sa zisk niektorého roka líši, prejdite do detailov údajov toho roka – často je to indikátor chýbajúcej alebo duplicitnej položky v danom období.

  • Rozdiely v súvahovej skúške: Ak je to možné, vytvorte tabuľku, kde uvediete každý účet a zostatok z QuickBooks oproti Beancount. Keďže očakávame, že sa budú zhodovať, mohol by to byť stĺpec so samými nulami. Toto je v podstate krížová kontrola súvahovej skúšky, o ktorej sme hovorili, ale jej zapísanie pomáha pri dokumentácii.

5.2 Príklad porovnania (pred vs. po)

Nižšie je príklad úryvku demonštrujúceho konzistentnosť údajov. Povedzme, že naša súvahová skúška z QuickBooks k 31. decembru 2023 bola:

ÚčetZostatok QuickBooks (31. 12. 2023)
Aktíva
  Assets:Bank:Checking12 500,00 USD (Má dať)
  Assets:Accounts Receivable3 200,00 USD (Má dať)
Pasíva
  Liabilities:Credit Card-1 200,00 USD (Dal)
  Liabilities:Loans Payable-5 000,00 USD (Dal)
Vlastné imanie
  Equity:Opening-Balances-7 500,00 USD (Dal)
  Equity:Retained Earnings-2 000,00 USD (Dal)
  Equity:Current Year Profit0,00 USD

V Beancount, po importovaní a zaúčtovaní všetkých transakcií do roku 2023, výstup bean-report balances (súvahová skúška) je:

ÚčetZostatok Beancount (31. 12. 2023)
Aktíva
  Assets:Bank:Checking12 500,00 USD (Má dať)
  Assets:Accounts Receivable3 200,00 USD (Má dať)
Pasíva
  Liabilities:Credit Card-1 200,00 USD (Dal)
  Liabilities:Loans Payable-5 000,00 USD (Dal)
Vlastné imanie
  Equity:Opening-Balances-7 500,00 USD (Dal)
  Equity:Retained Earnings-2 000,00 USD (Dal)
  Equity:Profit (2019-2023)0.00 USD

(Poznámka: Sekcie vlastného imania môžu byť štruktúrované odlišne; kľúčové je, aby sa celkové sumy zhodovali. Tu „Zisk (2019-2023)“ v Beancount hrá úlohu zisku bežného roka/nerozdeleného zisku spolu, pričom ukazuje nulu, pretože zisk bol uzavretý do Nerozdeleného zisku.)

Ako je vidieť, každý účet sa zhoduje na cent. Súčet strany Má dať sa rovná súčtu strany Dal na oboch stranách.

Dodatočne, ak spustíme výkaz ziskov a strát za rok 2023:

  • QuickBooks: Príjmy 50 000 USD, Náklady 48 000 USD, Čistý zisk 2 000 USD.
  • Beancount: Príjmy 50 000 USD, Náklady 48 000 USD, Čistý zisk 2 000 USD (ktorý bol potom uzavretý do Nerozdeleného zisku alebo sa objavuje v sekcii Vlastné imanie v koncoročnej súvahe).

Môžete vytvoriť porovnanie rozdielov transakcií, ak je to potrebné, ale keďže údaje z QuickBooks nie sú vo forme denníka, je efektívnejšie spoliehať sa na reporty. Mohli by ste zoradiť CSV z QuickBooks aj transakcie z Beancount podľa dátumu a porovnať kľúčové polia ako finálnu kontrolu (to sa dá urobiť v Exceli alebo pomocou skriptu). Avšak, vzhľadom na to, že dôverujeme našej predchádzajúcej validácii, kontrola finančných výkazov je zvyčajne dostatočná.

5.3 Tipy pre audit

  • Ak audítor alebo zainteresovaná strana potrebuje uistenie, prezentujte finančné výkazy pred a po vedľa seba. Transparentnosť Beancount môže v skutočnosti zjednodušiť audity, pretože môžete rýchlo vystopovať každé číslo z výkazu späť k zdrojovej položke (najmä pomocou funkcie prechodu do detailov vo Fava).
  • Uchovajte si zálohu QuickBooks a exportované CSV súbory ako súčasť vašej auditnej stopy. Zdokumentujte akékoľvek úpravy vykonané počas migrácie (napríklad „Premenovaný účet X na Y pre konzistenciu“ alebo „Rozdelená transakcia Z na dve položky pre prehľadnosť“, ak ste takéto zmeny urobili).
  • V budúcnosti implementujte pravidelné kontroly v Beancount. Napríklad, mesačné odsúhlasenie bankových účtov a potvrdenie ich konečného zostatku pomáha odhaliť akékoľvek problémy s údajmi alebo chyby v zápisoch. Migrácia poskytuje dobrý základ; udržiavanie disciplíny v novom systéme zabezpečí pokračujúcu presnosť.

Nakoniec, oslávte dokončenie migrácie: úspešne ste preniesli päť rokov účtovných údajov z QuickBooks do Beancount. Údaje sú teraz v ľahkom, verziovanom textovom formáte s plnou integritou podvojného účtovníctva. Exportovali ste údaje, transformovali ich pomocou Python skriptov, overili integritu prostredníctvom súvahových skúšok a reportov a uložili ich do dobre organizovaného denníka Beancount. Tento komplexný proces zabezpečuje, že denník Beancount je presnou a vernou replikou vašich účtovných kníh z QuickBooks za päťročné obdobie, čo vám pripravuje pôdu pre zjednodušené účtovníctvo v budúcnosti.