Ръководство за миграция от QuickBooks към Beancount
Етап 1: Експортиране на данни от QuickBooks
Мигрирането на данни за пет години започва с извличането на всички записи от QuickBooks в използваем формат. QuickBooks Desktop и QuickBooks Online имат различни опции за експорт:
1.1 QuickBooks Desktop – Опции за експорт
IIF (Intuit Interchange Format): QuickBooks Desktop може да експортира списъци (като сметкоплан, клиенти, доставчици) в текстови файлове .IIF
. В QuickBooks Desktop отидете на Файл → Помощни програми → Експорт → Списъци в IIF (File → Utilities → Export → Lists to IIF), след което изберете списъците, от които се нуждаете (напр. Сметкоплан, Клиенти, Доставчици). Това създава текстов файл, който включва имена на сметки, типове и данни от списъците. IIF е патентован, но текстов формат, който е сравнително лесен за анализиране. Използвайте го, за да заснемете своя Сметкоплан и списъци с контакти за справка в Beancount.
Главна книга/Оборотна ведомост чрез CSV: За транзакционни данни QuickBooks Desktop не предоставя експорт с едно кликване, но можете да използвате отчети. Препоръчителният метод е да експортирате Главния журнал (General Journal) (всички транзакции) за желания период. В QuickBooks Desktop отворете Отчети → Счетоводител и данъци → Журнал (Reports → Accountant & Taxes → Journal), задайте датите от най-ранната транзакция до днес и кликнете върху Експорт → Excel. Запазете резултата като CSV, след като премахнете заглавките/долните колонтитули на отчета и празните колони. Уверете се, че числовите данни са чисти: включете стотинки (напр. 3.00
, а не 3
), без излишни кавички и без символи за валута или двойни минуси в CSV файла. CSV файлът трябва да има колони като Дата, № на транзакция, Име, Сметка, Бележка, Дебит, Кредит, Салдо (или една колона за сума в зависимост от формата на отчета).
Съвет: QuickBooks Desktop 2015+ може също да експортира транзакции чрез диалоговия прозорец Намиране (Find). Използвайте Редактиране → Намиране → Разширено (Edit → Find → Advanced), задайте периода от пет години, след което експортирайте резултатите в 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) предоставя инструмент за Експорт на данни (Export Data). Отидете на Настройки ⚙ → Инструменти → Експорт на данни (Settings ⚙ → Tools → Export Data). В диалоговия прозорец за експорт използвайте раздела Отчети (Reports), за да изберете данни (нап р. Главна книга или Списък на транзакциите) и раздела Списъци (Lists) за списъци (сметкоплан и др.), изберете Всички дати (All dates) и експортирайте в Excel. QuickBooks Online ще изтегли ZIP архив, съдържащ множество Excel файлове за избраните отчети и списъци (например, Отчет за приходите и разходите, Баланс, Главна книга, Клиенти, Доставчици, Сметкоплан и др.). След това можете да конвертирате тези Excel файлове в CSV за обработка.
Отчет с детайли на транзакциите: Ако експортът по подразбиране на QBO не включва един файл с Главна книга, можете ръчно да генерирате подробен отчет:
- Отидете на Отчети (Reports) и намерете Детайли на транзакциите по сметка (Transaction Detail by Account) (или Главна книга (General Ledger) в някои версии на QBO).
- Задайте Период на отчета (Report period) за целия петгодишен период.
- Под опциите на отчета задайте Групиране по = Няма (Group by = None) (за да се изброят отделните транзакции без междинни суми).
- Персонализирайте колоните, за да включват поне: Дата, Тип на транзакцията, Номер, Име (Полу чател/Клиент), Бележка/Описание, Сметка, Дебит, Кредит (или една колона Сума) и Салдо. Включете клас или местоположение, ако се използват.
- Генерирайте отчета и след това Експортирайте в Excel.
Това дава подробна книга на всички транзакции. Запазете я като CSV. Всеки ред ще представлява едно записване (осчетоводяване) на транзакция. По-късно ще трябва да групирате редовете по транзакции за конвертиране.
Сметкоплан и други списъци: QuickBooks Online може да експортира сметкоплана чрез Счетоводство → Сметкоплан → Групови действия → Експорт в Excel (Accounting → Chart of Accounts → Batch Actions → Export to Excel). Направете това, за да получите имената и типовете на сметките. По същия начин експортирайте Клиенти, Доставчици и др., ако искате да прехвърлите имената за метаданни.
QuickBooks Online API (По избор): За програмен подход, 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 понякога използва двоеточие (
:
) в имената на сметките, за да обозначи подсметки (напр. „Current Assets:Checking“). Beancount използва същата нотация с двоеточие за йерархия. Често можете да използвате името директно. Ако имената на сметките в QuickBooks не започват с категория, добавете съпоставената категория отпред. Например, сметка в QuickBooks от типBANK
, наречена "Checking", ще станеAssets:Checking
в Beancount. СметкаEXP
(разход), наречена "Meals", ставаExpenses:Meals
и т.н. -
Осигурете валидни имена: Премахнете или заменете всякакви символи, които могат да объркат 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)
# Групиране на редовете по транзакция (ако приемем, че 'Trans #' идентифицира транзакциите)
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:
# Някои експорти имат една колона "Amount" (отрицателна за кредити)
amt_str = amount
else:
# Ако има отделни колони Debit/Credit
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
(попълнен от стъпката със сметкоплана). - Определя сумата. В зависимост от вашия експорт, може да имате една колона Amount (с положителни/отрицателни стойности) или отделни колони Debit и Credit. Кодът по-горе обработва и двата случая. Той гарантира, че кредитите са представени като отрицателни суми за 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 като метаданни (напр. използвайте
Trans #
или номер на фактура като таг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 Равнение на оборотна ведомост
Отчетът оборотна ведомост (trial balance) изброява крайните салда на всички сметки (с посочени дебити и кредити или положителни/отрицателни стойности) и трябва да се равнява на нула. Генерирането на оборотна ведомост в двете системи за една и съща дата е най-бързият начин да се потвърди общата точност.
-
В QuickBooks: Генерирайте отчет Оборотна ведомост (Trial Balance) за последния ден от последната година (напр. 31 декември 2023 г.). Този отчет показва салдото на всяка сметка. Експортирайте го или си запишете ключовите цифри.
-
В Beancount: Използвайте отчетите на Beancount, за да генерирате оборотна ведомост. Един лесен метод е чрез командния ред:
bean-report migrated.beancount balances
Отчетът
balances
е оборотна ведомост, която изброява всички сметки и техните салда. Можете също да отворите файла във Fava (уеб интерфейса на Beancount) и да погледнете секцията Салда (Balances) или Баланс (Balance Sheet). Всяко салдо на сметка в Beancount трябва да съвпада с оборотната ведомост на QuickBooks. Например, ако QuickBooks показва *Вземания = 5,000 (дебит). Ако *Приходи от продажби = 200,000 (кредит, което може да се покаже като -200,000, ако използвате оборотна ведомост, която представя кредитите като отрицателни).
Ако има несъответствия, локализирайте ги:
- Проверете дали цяла сметка липсва или е в повече (забравили ли сме сметка или сме включили такава, която вече е била закрита преди периода на миграция?).
- Ако салдото е грешно, разгледайте в детайли: QuickBooks може да генерира Бърз отчет по сметка (Account QuickReport) или детайлна книга за тази сметка, и можете да я сравните с регистъра на Beancount за тази сметка (
bean-report migrated.beancount register -a ИменаСметка
). Понякога разликите идват от липсваща или дублирана транзакция.
Също така проверете дали сумата на всички сметки е нула в оборотната ведомост на Beancount (тя отпечатва обща сума, която трябва да бъде нула или много бл изо до нула). Beancount налага двойно записване, така че ако имате някакъв ненулев небаланс, това означава, че активите минус пасивите-собствен капитал не се равняват на нула, което показва проблем (който QuickBooks обикновено също не би позволил, но може да се случи, ако някои данни са били пропуснати).
3.2 Сравнение на салдата по сметки
Освен оборотната ведомост, можете да сравните конкретни финансови отчети:
-
Баланс: Генерирайте Баланс в QuickBooks за крайната дата и баланс в Beancount (
bean-report migrated.beancount balsheet
). Това е подобно на оборотната ведомост, но организирано по Активи, Пасиви, Собствен капитал. Числата трябва да съвпадат по категории. За по-детайлна проверка, сравнете общите суми на основните сметки: парични средства, вземания, дълготрайни активи, задължения, собствен капитал и др. -
Отчет за приходите и разходите (ОПР): Генерирайте ОПР за пет годишния период (или година по година) в QuickBooks и в Beancount (
bean-report migrated.beancount income
за ОПР за целия период). Нетната печалба от Beancount трябва да е равна на тази от QuickBooks за всеки период. Ако сте мигрирали всичките пет години, кумулативната нетна печалба трябва да съвпада. Можете също да сравните отделните общи суми на приходите и разходите, за да се уверите, че никоя категория не е пропусната или удвоена. -
Случайна извадка от транзакции: Изберете няколко случайни транзакции (особено от всяка година и всяка основна сметка) и проверете дали са мигрирали правилно. Например, намерете фактура отпреди 3 години в QuickBooks и след това потърсете нейната сума или бележка във файла на Beancount (тъй като всички транзакции са текст, можете да отворите файла
.beancount
в текстов редактор или да използвате инструменти за търсене). Проверете дали датата, сумите и сметките съвпадат. Това помага да се хванат всякакви проблеми с форматирането на дати или грешно съпоставени сметки.