Посібник з міграції з QuickBooks до Beancount
Етап 1: Експорт даних із QuickBooks
Міграція даних за п'ять років починається з вивантаження всіх записів із QuickBooks у придатному для використання форматі. QuickBooks Desktop та QuickBooks Online мають різні опції експорту:
1.1 QuickBooks Desktop – Опції експорту
IIF (Intuit Interchange Format): QuickBooks Desktop може експортувати списки (як-от план рахунків, клієнти, постачальники) у текстові файли .IIF
. У QuickBooks Desktop перейдіть до Файл → Утиліти → Експорт → Списки до IIF, а потім виберіть потрібні списки (наприклад, План рахунків, Клієнти, Постачальники). Це створить текстовий файл, що містить назви рахунків, їхні типи та дані списків. IIF — це пропрієтарний, але текстовий формат, який відносно легко аналізувати. Використовуйте його для отримання вашого Плану рахунків та списків контактів для подальшого використання в Beancount.
Головна книга/Журнал через CSV: Для експорту транзакцій QuickBooks Desktop не надає повного експорту в один клік, але можна використовувати звіти. Рекомендований метод — експортувати Головний журнал (усі транзакції) за потрібний період. У QuickBooks Desktop відкрийте Звіти → Бухгалтер та податки → Журнал, встановіть Дати від найранішої транзакції до сьогодні, та натисніть Експорт → Excel. Збережіть результат як CSV, видаливши заголовки/нижні колонтитули звіту та порожні стовпці. Переконайтеся, що числові дані чисті: вони мають містити центи (наприклад, 3.00
, а не 3
), не мати зайвих лапок, символів валют або подвійних мінусів у CSV. CSV-файл повинен мати стовпці, такі як Дата, № транзакції, Назва, Рахунок, Примітка, Дебет, Кредит, Залишок (або єдиний стовпець "Сума" залежно від формату звіту).
Порада: QuickBooks Desktop 2015+ також може експортувати транзакції через діалогове вікно Знайти. Використовуйте Редагувати → Знайти → Розширений пошук, встановіть діапазон дат на п'ять років, а потім експортуйте результати у CSV. Увага: Деякі версії обмежують експорт 32,768 рядками. Якщо у вас дуже великий обсяг даних, експортуйте їх по роках (або меншими частинами), щоб уникнути обрізання, а потім об'єднайте їх. Переконайтеся, що діапазони дат не перетинаються, щоб уникнути дублікатів.
Інші формати (QBO/QFX/QIF): QuickBooks Desktop може імпортувати банківські транзакції через файли .QBO
(Web Connect) або .QFX/.OFX
, але для експорту з QuickBooks вони зазвичай не використовуються. Якщо ваша мета — витягти лише банківські транзакції, ви, можливо, вже маєте їх у форматі QBO/OFX від вашого банку. Однак для повного експорту книги дотримуйтесь IIF та CSV. QuickBooks Desktop не може безпосередньо експортувати у QIF (Quicken Interchange Format) без сторонніх інструментів. Якщо ви все ж знайдете спосіб отримати QIF, зауважте, що деякі інструменти для ведення обліку (старі версії Ledger 2.x) могли читати QIF, але для нашого процесу краще працювати з CSV.
1.2 QuickBooks Online – Опції експорту
Вбудований експорт в Excel/CSV: QuickBooks Online (QBO) надає інструмент Експортувати дані. Перейдіть до Налаштування ⚙ → Інструменти → Експортувати дані. У діалоговому вікні експорту на вкладці Звіти виберіть дані (наприклад, Головна книга або Список транзакцій), а на вкладці Списки — списки (план рахунків тощо), оберіть Усі дати та експортуйте в Excel. QuickBooks Online завантажить ZIP-архів, що містить кілька файлів Excel для вибраних звітів та списків (наприклад, Звіт про прибутки та збитки, Балансовий звіт, Головна книга, Клієнти, Постачальники, План рахунків тощо). Потім ви можете конвертувати ці файли Excel у CSV для обробки.
Звіт про деталізацію транзакцій: Якщо стандартний експорт QBO не містить єдиного файлу Головної книги, ви можете вручну створити детальний звіт:
- Перейдіть до Звіти та знайдіть Деталізація транзакцій за рахунком (або Головна книга в деяких версіях QBO).
- Встановіть Період звіту на повний п'ятирічний діапазон.
- В опціях звіту вста новіть Групувати за = Немає (щоб перелічити окремі транзакції без проміжних підсумків).
- Налаштуйте стовпці, щоб включити принаймні: Дата, Тип транзакції, Номер, Назва (Одержувач/Клієнт), Примітка/Опис, Рахунок, Дебет, Кредит (або єдиний стовпець Сума), та Залишок. Включіть будь-який клас або місцезнаходження, якщо вони використовуються.
- Запустіть звіт, а потім Експортуйте в Excel.
Це дасть детальну книгу всіх транзакцій. Збережіть її як CSV. Кожен рядок представлятиме одне проведення (запис) транзакції. Пізніше вам потрібно буде згрупувати рядки за транзакціями для конвертації.
План рахунків та інші списки: QuickBooks Online може експортувати план рахунків через Бухгалтерія → План рахунків → Пакетні дії → Експортувати в Excel. Зробіть це, щоб отримати назви та типи рахунків. Так само експортуйте Клієнтів, Постачальників тощо, якщо хочете перенести імена для метаданих.
API QuickBooks Online (Необов'язково): Для програмного підходу Intuit надає REST API для даних QBO. Досвідчені користувачі можуть створити додаток QuickBooks Online (потрібен акаунт розробн ика) та використовувати API для отримання даних у форматі JSON. Наприклад, ви можете запитати ендпоінт Account
для плану рахунків та ендпоінти звітів JournalEntry
або GeneralLedger
для транзакцій. Існують Python SDK, як-от python-quickbooks
, що є обгортками для API. Однак використання API включає OAuth-аутентифікацію і є надмірним для одноразової міграції, якщо ви не віддаєте перевагу автоматизації. У більшості випадків ручний експорт у CSV/Excel є простішим та менш схильним до помилок.
Етап 2: Трансформація та очищення даних
Коли ви маєте дані з QuickBooks у форматі CSV (та/або IIF), наступним кроком є їх конвертація у текстовий формат книги Beancount. Це включає аналіз експортованих файлів, зіставлення рахунків QuickBooks із планом рахунків Beancount та форматування транзакцій у синтаксисі Beancount.
2.1 Аналіз експо ртованих даних QuickBooks за допомогою Python
Використання Python забезпечить точність та відтворюваність трансформації. Ми окреслимо скрипти для двох ключових завдань: імпорту плану рахунків та конвертації транзакцій.
Імпорт та зіставлення рахунків: Важливо налаштувати ваші рахунки в Beancount перед додаванням транзакцій. Рахунки QuickBooks мають типи (Банк, Дебіторська заборгованість, Витрати тощо), які ми зіставимо з ієрархією Beancount (Активи, Зобов'язання, Доходи, Витрати тощо). Наприклад, ми можемо використовувати таке зіставлення:
# Відповідність типу рахунку QuickBooks до кореневої категорії Beancount
AccountTypeMap = {
'BANK': 'Assets',
'CCARD': 'Liabilities',
'AR': 'Assets', # Дебіторська заборгованість як актив
'AP': 'Liabilities', # Кредиторська заборгованість як зобов'язання
'FIXASSET': 'Assets',
'OASSET': 'Assets', # Інший актив
'OCASSET': 'Assets', # Інший поточний актив
'LTLIAB': 'Liabilities', # Довгострокове зобов'язання
'OCLIAB': 'Liabilities', # Інше поточне зобов'язання
'EQUITY': 'Equity',
'INC': 'Income',
'EXP': 'Expenses',
'EXINC': 'Income', # Інший дохід
'EXEXP': 'Expenses', # Інша витрата
}
Використовуючи експорт IIF з QuickBooks Desktop або CSV-файл списку рахунків з QBO, ми отримуємо назву та тип кожного рахунку. Потім:
-
Створюємо назви рахунків Beancount: QuickBooks іноді використовує двокрапки (
:
) у назвах рахунків для позначення субрахунків (наприклад, “Поточні Активи:Розрахунковий”). Beancount використовує ту саму нотацію для ієрархії. Часто можна використовувати назву безпосередньо. Якщо назви рахунків QuickBooks не починаються з категорії, додайте зіставлену категорію. Наприклад, рахунок QuickBooks типуBANK
з назвою "Розрахунковий" станеAssets:Розрахунковий
у Beancount. РахунокEXP
(витрати) "Харчування" станеExpenses:Харчування
і т.д. -
Забезпечуємо в алідність назв: Видаліть або замініть будь-які символи, які можуть заплутати Beancount. QuickBooks дозволяє символи на кшталт
&
або/
у назвах. Розумно видалити або замінити спеціальні символи (наприклад, замінити&
наand
, видалити слеші або пробіли). Також переконайтеся, що всі назви рахунків унікальні після трансформації — QuickBooks міг дозволяти однакові назви субрахунків під різними батьківськими, що нормально, але в Beancount повна назва (з батьківськими) має бути унікальною. За потреби перейменуйте або додайте кваліфікатор для їх розрізнення. -
Генеруємо відкриття рахунків: У Beancount кожен використаний рахунок повинен бути відкритий за допомогою директиви
open
. Ви можете вибрати дату перед вашою першою транзакцією (наприклад, якщо мігруєте дані за 2019–2023 роки, використовуйте2018-12-31
або ще ранішу дату для всіх відкриттів). Скрипт запише рядки на кшталт:2018-12-31 open Assets:Checking USD
2018-12-31 open Expenses:Meals USD
для кожного рахунку (припускаючи, що USD є основною валютою). Використовуйте відповідну валюту для кожного рахунку (див. нотатки про мультивалют ність нижче).
Конвертація транзакцій: Основна складність полягає в конвертації експортованих транзакцій QuickBooks (CSV) у записи Beancount. Кожна транзакція QuickBooks (рахунок-фактура, рахунок, чек, журнальний запис тощо) може мати кілька проведень (рядків), які необхідно зібрати в одну транзакцію Beancount.
Ми використаємо CSV-рідер Python для ітерації по експортованих рядках та накопичення проведень:
import csv
from collections import defaultdict
# Читаємо всі рядки з CSV журналу 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)
# Групуємо рядки за транзакцією (припускаючи, що '№ транзакції' ідентифікує транзакції)
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)
Тепер transactions
— це словник, де кожен ключ — це ID/номер транзакції, а значення — список проведень для цієї транзакції. Далі ми конвертуємо кожну групу в Beancount:
def format_date(qb_date):
# Дати в QuickBooks можуть бути у форматі "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():
# Сортуємо проведення за порядком, якщо потрібно (зазвичай вони йдуть по порядку)
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()
# Заголовок транзакції
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # додаємо номер, якщо є
output_lines.append(f" number: \"{first['Num']}\"")
# Проходимо по кожному проведенню/запису
for split in splits:
acct_name = split['Account'].strip()
# Зіставляємо назву рахунку QuickBooks з рахунком Beancount (використовуючи попередню мапу)
beancount_acct = account_map.get(acct_name, acct_name)
# Визначаємо суму зі знаком:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# Деякі експорти мають один стовпець "Сума" (негативний для кредитів)
amt_str = amount
else:
# Якщо окремі стовпці "Дебет"/"Кредит"
amt_str = debit if debit else f"-{credit}"
# Видаляємо коми в числах для безпеки
amt_str = amt_str.replace(",", "")
# Додаємо валюту
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# Примітка/опис для проведення
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# Кінець транзакції – порожній рядок
output_lines.append("")
Ця логіка скрипта виконує наступне:
-
Форматує дату в YYYY-MM-DD для Beancount.
-
Використовує отримувача (Name) та примітку (Memo) для опису транзакції. Наприклад:
2020-05-01 * "ACME Corp" "Оплата рахунку"
(Якщо отримувача немає, можна використати Тип транзакції QuickBooks або залишити лапки порожніми). -
Додає метадані
number
, якщо є номер (номер чека, рахунку-фактури тощо). -
Ітерує по кожному рядку проведення:
- Зіставляє назву рахунку QuickBooks з рахунком Beancount за допомогою словника
account_map
(заповненого на етапі роботи з планом рахунків). - Визначає суму. Залежно від вашого експорту, у вас може бути один стовпець Сума (з позитивними/негативними знач еннями) або окремі стовпці Дебет та Кредит. Наведений вище код обробляє обидва випадки. Він забезпечує, що кредити представлені як негативні суми для Beancount (оскільки в Beancount для кожного проведення використовується одне число зі знаком).
- Додає валюту (припускаючи USD, якщо немає окремого стовпця з валютою).
- Записує рядок проведення Beancount з рахунком, сумою та коментарем з примітки до рядка. Наприклад:
Assets:Checking 500.00 USD ; Депозит
Income:Sales -500.00 USD ; Депозит
Це відображає депозит у $500 (з Доходів на Розрахунковий рахунок).
- Зіставляє назву рахунку QuickBooks з рахунком Beancount за допомогою словника
-
Після переліку всіх проведень, транзакцію відокремлює порожній рядок.
Обробка мультивалютності: Якщо ваші дані QuickBooks включають кілька валют, додайте код валюти до кожного проведення (як показано вище). Переконайтеся, що рахунки в іноземних валютах відкриті з цією валютою. Наприклад, якщо у вас є банківський рахунок в EUR, ви б вивели open Assets:Bank:Checking EUR
, і транзакції на цьому рахунку використовуватимуть EUR. Beancount підтримує мультивалютні книги й відстежуватиме неявні конвертації, але вам може знадобитися додати запи си про курси, якщо ви хочете бачити конвертацію в базову валюту у звітах. Також рекомендується оголосити вашу основну операційну валюту на початку файлу Beancount (наприклад, option "operating_currency" "USD"
).
Запуск конвертації: Збережіть скрипт Python (наприклад, як qb_to_beancount.py
) і запустіть його на ваших експортованих файлах. Він повинен створити файл .beancount
, що містить усі рахунки та транзакції.
2.2 Обробка крайніх випадків та очищення даних
Під час трансформації звертайте увагу на ці поширені проблеми та способи їх вирішення:
-
Невідповідності в назвах рахунків: QuickBooks може мати назви рахунків, що конфліктують з ієрархічними назвами Beancount. Наприклад, у QuickBooks може бути два різні батьківські рахунки, кожен із субрахунком "Страхування". У Beancount
Expenses:Insurance
має бути унікальним. Вирішіть це, перейменувавши один з них (наприклад, "Страхування-Авто" проти "Страхування-Здоров'я") перед експортом або зіставте їх з унікальними рахунками Beancount у вашому скрипті. Послідовні правила іменування (без спеціальних символів та використання ієрархії) заощадять вам головний біль. Використовуйте підхід з файлом перепризначення, якщо потрібно: ведіть CSV або словник "стара назва" → "нова назва Beancount" і застосовуйте його під час конвертації (наш приклад коду використовуєaccount_map
і може завантажувати перевизначення з файлу). -
Дати та формати: Переконайтеся, що всі дати мають послідовний формат. Наведений вище скрипт нормалізує M/D/Y до формату ISO. Також слідкуйте за проблемами фіскального та календарного року, якщо ваш п'ятирічний період перетинає кінець року. Beancount не зважає на межі фіскального року, але ви можете пізніше захотіти розділити файли за роками для зручності.
-
Числова точність: QuickBooks обробляє валюту з центами, тому робота в центах зазвичай не є проблемою. Всі суми в CSV ідеально повинні мати два десяткових знаки. Якщо якісь суми перетворилися на цілі числа (без десяткової частини) або мають коми/дужки (для негативних значень), очистіть їх у скрипті (видаліть коми, перетворіть
(100.00)
на-100.00
тощо). Експорт у CSV, якщо зроблений правильно (згідно з інструкціями), вже повинен уникнути цих проблем з форматуванням. -
Від'ємні суми та знаки: Звіти QuickBooks іноді показують негативні значення як
-100.00
,(100.00)
або навіть--100.00
у певних експортах Excel. Крок очищення повинен обробляти це. Переконайтеся, що дебети та кредити кожної транзакції збалансовані до нуля. Beancount вимагатиме цього (якщо не збалансовано, він видасть помилку під час імпорту). -
Дублікати транзакцій: Якщо вам довелося експортувати транзакції партіями (наприклад, рік за роком або рахунок за рахунком), будьте обережні, щоб об'єднати їх без перекриття. Перевірте, чи перша транзакція року не є також останньою з попередньої партії тощо. Легко випадково продублювати кілька транзакцій на межах. Якщо ви підозрюєте дублікати, ви можете відсортувати кінцеві записи Beancount за датою та шукати ідентичні записи, або використовув ати унікальні теги транзакцій Beancount для їх виявлення. Одна зі стратегій — включати номери транзакцій QuickBooks як метадані (наприклад, використовувати
№ транзакції
або номер рахунку-фактури як тегtxn
або метаданіquickbooks_id
), а потім переконатися, що дублікатів цих ID немає. -
Незбалансовані проведення / Транзитні рахунки: QuickBooks може мати дивні випадки, як-от транзакція з дисбалансом, який QuickBooks автоматично скоригував на рахунок “Початковий власний капітал” або “Нерозподілений прибуток”. Наприклад, при встановленні початкових залишків на рахунках QuickBooks часто проводить різницю на рахунок власного капіталу. Вони з'являться в експортованих транзакціях. Beancount вимагатиме явного балансування. Вам може знадобитися ввести рахунок власного капіталу для початкових залишків (зазвичай
Equity:Opening-Balances
), щоб відобразити дії QuickBooks. Хорошою практикою є створення запису про початкові залишки в перший день вашої книги, який встановлює стартові баланси всіх рахунків (див. Етап 5). -
Крайні випадки з мультивалютністю: При використанні кількох валют експорт з QuickBooks може містити всі суми в домашній валюті або в їхній рідній валюті. Ідеально отримати дані в рідній валюті для кожного рахунку (звіти QuickBooks Online зазвичай так роблять). У Beancount кожне проведення несе валюту. Якщо QuickBooks надав обмінні курси або конвертацію в домашню валюту, ви можете проігнорувати їх і покластися на записи про ціни Beancount. Якщо QuickBooks не експортував обмінні курси, вам може знадобитися вручну додати записи про ціни (наприклад, за допомогою директиви
price
Beancount) для ключових дат, щоб відповідати оцінці. Однак для базової цілісності книги достатньо, щоб транзакції балансувалися у своїх оригінальних валютах — нереалізовані прибутки/збитки не потрібно явно записувати, якщо ви не хочете мати такі ж звіти. -
Дебіторська / Кредиторська заборгованість: QuickBooks відстежує деталі рахунків-фактур та рахунків (терміни оплати, статус оплати тощо), які не будуть повністю перенесені в просту книгу. Ви отримаєте транзакції по ДЗ та КЗ (рахунки-фактури, що збільшують ДЗ, платежі, що зменшують ДЗ тощо), але не документи рахунків-фактур або баланси клієнтів за кожним рахунком. Як результат, після міграції ви повинні перевірити, чи баланси ваших рахунків ДЗ та КЗ у Beancount дорівнюють відкритим балансам клієнтів/постачальників у QuickBooks. Якщо вам потрібно відстежувати рахунки-фактури, ви можете використовувати метадані Beancount (наприклад, включити тег
invoice
або посилання). Номери рахунків-фактур QuickBooks повинні були перейти в поляNum
абоMemo
— наш скрипт зберігаєNum
якnumber: "..."
у метаданих транзакції. -
Неактивні або закриті рахунки: Експорт IIF може включати неактивні рахунки (якщо ви вибрали їх включення). Це нормально — імпортувати їх (вони просто не матимуть транзакцій і нульовий баланс, якщо справді неактивні). Ви можете позначити їх як закриті в Beancount після дати останньої транзакції за допомогою директиви
close
. Це підтримує вашу книгу в порядку. Наприклад:2023-12-31 close Expenses:OldAccount ; закрито після міграції
Це необов'язково і в основному для чистоти.
Ретельно очистивши та зіставивши дані, як описано вище, ви отримаєте файл книги Beancount, який структурно відображає ваші дані з QuickBooks. Наступний крок — перевірити, чи він т акож чисельно відповідає QuickBooks.
Етап 3: Перевірка та звірка даних
Перевірка є критично важливим етапом у міграції бухгалтерських даних. Нам потрібно переконатися, що книга Beancount відповідає записам QuickBooks до копійки. Для цього можна використовувати кілька стратегій та інструментів:
3.1 Звірка за оборотним балансом
Звіт оборотний баланс (або пробний баланс) перелічує кінцеві залишки всіх рахунків (з дебетами та кредитами, або позитивними/негативними значеннями) і в сумі має давати нуль. Запуск оборотного балансу в обох системах на ту саму дату — найшвидший спосіб підтвердити загальну точність.
-
У QuickBooks: Сформуйте звіт Оборотний баланс на останній день фінального року (наприклад, 31 грудня 2023 року). Цей звіт показує баланс кожного рахунку. Експортуйте його або запишіть ключові показники.
-
У Beancount: Використовуйте звіти Beancount для генерації оборотного балансу. Один з легких способів — через командний рядок:
bean-report migrated.beancount balances
Звіт
balances
є оборотним балансом, що перелічує всі рахунки та їхні залишки. Ви також можете відкрити файл у Fava (веб-інтерфейс Beancount) і подивитися розділ Balances або Balance Sheet. Кожен залишок рахунку в Beancount повинен збігатися з оборотним бала нсом QuickBooks. Наприклад, якщо QuickBooks показує Дебіторська заборгованість = 5,000 грн, то рахунок Assets:Accounts Receivable у Beancount повинен мати загальну суму 5,000 грн (дебет). Якщо Дохід від продажів = 200,000 грн, то Income:Sales у Beancount повинен показувати 200,000 грн (кредит, що може відображатися як -200,000, якщо використовується оборотний баланс, який представляє кредити як негативні значення).
Якщо є розбіжності, знайдіть їх:
- Перевірте, чи не відсутній або не є зайвим цілий рахунок (чи не забули ми рахунок, чи не включили той, що був закритий до періоду міграції?).
- Якщо баланс не збігається, заглибтеся: QuickBooks може сформувати Account QuickReport або деталізацію книги для цього рахунку, і ви можете порівняти її з регістром Beancount для цього рахунку (
bean-report migrated.beancount register -a AccountName
). Іноді розбіжності виникають через відсутню або дубльовану транзакцію.
Також перевірте, що сума всіх рахунків дорівнює нулю в оборотному балансі Beancount (він друкує загальну суму, яка повинна бути нульовою або дуже близькою до нуля). Beancount забезпечує подвійний запис, тому якщо у вас є будь-який ненульовий дисбаланс, це означає, що активи мінус зобов'язання-капітал не зійшлися в нуль, що вказує на проблему (яку QuickBooks зазвичай теж не допустив би, але це могло статися, якщо деякі дані були втрачені).
3.2 Порівняння залишків на рахунках
Крім оборотного балансу, ви можете порівняти конкретні фінансові звіти:
-
Балансовий звіт: Сформуйте Балансовий звіт у QuickBooks на кінцеву дату та балансовий звіт у Beancount (
bean-report migrated.beancount balsheet
). Це схоже на оборотний баланс, але організовано за Активами, Зобов'язаннями, Власним капіталом. Цифри повинні збігатися за категоріями. Для більш детальної перевірки порівняйте загальні суми основних рахунків: грошові кошти, ДЗ, основні засоби, КЗ, власний капітал тощо. -
Звіт про прибутки та збитки (Income Statement): Сформуйте Звіт про прибутки та збитки за п'ятирічний період (або рік за роком) у QuickBooks та в Beancount (
bean-report migrated.beancount income
для звіту про прибутки за весь період). Чистий прибуток з Beancount повинен дорівнювати прибутку з QuickBooks для кожного періоду. Якщо ви мігрували всі п'ять років, сукупний чистий прибуток повинен збігатися. Ви також можете порівняти окремі суми доходів та витрат, щоб переконатися, що жодна категорія не була пропущена або подвоєна. -
Випадкова вибірка транзакцій: Виберіть кілька випадкових транзакцій (особливо з кожного року та кожного основного рахунку) і перевірте, чи вони мігрували правильно. Наприклад, знайдіть рахунок-фактуру трирічної давності в QuickBooks, а потім знайдіть його суму або примітку у файлі Beancount (оскільки всі транзакції є текстом, ви можете відкрити файл
.beancount
у текстовому редакторі або використовувати інструменти пошуку). Перевірте, чи збігаються дата, суми та рахунки. Це допоможе виявити будь-які проблеми з форматуванням дати або неправильно зіставлені рахунки.