Guia Prático de Migração do QuickBooks para o Beancount
Etapa 1: Exportando Dados do QuickBooks
A migração de cinco anos de dados começa com a extração de todos os registros do QuickBooks em um formato utilizável. O QuickBooks Desktop e o QuickBooks Online têm opções de exportação diferentes:
1.1 QuickBooks Desktop – Opções de Exportação
IIF (Intuit Interchange Format): O QuickBooks Desktop pode exportar listas (como plano de contas, clientes, fornecedores) para arquivos de texto .IIF
. No QuickBooks Desktop, vá para File → Utilities → Export → Lists to IIF e selecione as listas que você precisa (ex: Plano de Contas, Clientes, Fornecedores). Isso gera um arquivo de texto que inclui nomes de contas, tipos e dados da lista. O IIF é um formato proprietário, mas de texto simples, que é relativamente fácil de analisar. Use-o para capturar seu Plano de Contas e listas de contatos para referência no Beancount.
Razão Geral/Diário via CSV: Para dados de transações, o QuickBooks Desktop não oferece uma exportação completa com um clique, mas você pode usar relatórios. O método recomendado é exportar o Diário Geral (todas as transações) no intervalo de datas desejado. No QuickBooks Desktop, abra Reports → Accountant & Taxes → Journal, defina as Datas desde a primeira transação até hoje e clique em Export → Excel. Salve o resultado como CSV após remover quaisquer cabeçalhos/rodapés de relatório e colunas vazias. Certifique-se de que os dados numéricos estejam limpos: inclua centavos (ex: 3.00
, não 3
), sem aspas extras e sem símbolos de moeda ou negativos duplos no CSV. O CSV deve ter colunas como Date, Trans #, Name, Account, Memo, Debit, Credit, Balance (ou uma única coluna de Valor, dependendo do formato do relatório).
Dica: O QuickBooks Desktop 2015+ também pode exportar transações através da caixa de diálogo Find. Use Edit → Find → Advanced, defina o intervalo de datas para cinco anos e, em seguida, exporte os resultados para CSV. Aviso: Algumas versões limitam a exportação a 32.768 linhas. Se você tiver dados muito grandes, exporte ano a ano (ou em partes menores) para evitar o truncamento e, depois, combine-os. Garanta que os intervalos de datas não se sobreponham para evitar duplicatas.
Outros Formatos (QBO/QFX/QIF): O QuickBooks Desktop pode importar transações bancárias via arquivos .QBO
(Web Connect) ou .QFX/.OFX
, mas para exportar do QuickBooks, estes não são típicos. Se seu objetivo é extrair apenas transações bancárias, você talvez já as tenha em QBO/OFX do seu banco. No entanto, para uma exportação completa do livro-razão, mantenha-se com IIF e CSV. O QuickBooks Desktop não pode exportar diretamente para QIF (Quicken Interchange Format) sem ferramentas de terceiros. Se você encontrar uma maneira de obter QIF, note que algumas ferramentas de contabilidade (Ledger 2.x mais antigo) podiam ler QIF, mas é melhor trabalhar com CSV em nosso processo.
1.2 QuickBooks Online – Opções de Exportação
Exportação Integrada para Excel/CSV: O QuickBooks Online (QBO) oferece uma ferramenta de Exportar Dados. Vá para Configurações ⚙ → Ferramentas → Exportar Dados. Na caixa de diálogo de exportação, use a guia Relatórios para selecionar dados (ex: Razão Geral ou Lista de Transações) e a guia Listas para listas (plano de contas, etc.), escolha Todas as datas e exporte para Excel. O QuickBooks Online fará o download de um ZIP contendo vários arquivos Excel para os relatórios e listas selecionados (por exemplo, Demonstração de Resultados, Balanço Patrimonial, Razão Geral, Clientes, Fornecedores, Plano de Contas, etc.). Você pode então converter esses arquivos Excel para CSV para processamento.
Relatório de Detalhe de Transações: Se a exportação padrão do QBO não incluir um único arquivo de Razão Geral, você pode gerar manualmente um relatório detalhado:
- Navegue para Relatórios e encontre Detalhe de Transações por Conta (ou Razão Geral em algumas versões do QBO).
- Defina o Período do relatório para o intervalo completo de cinco anos.
- Nas opções do relatório, defina Agrupar por = Nenhum (para listar transações individuais sem subtotais).
- Personalize as colunas para incluir pelo menos: Data, Tipo de Transação, Número, Nome (Beneficiário/Cliente), Memo/Descrição, Conta, Débito, Crédito (ou uma única coluna de Valor) e Saldo. Inclua qualquer classe ou local, se usado.
- Execute o relatório e, em seguida, Exporte para Excel.
Isso gera um razão detalhado de todas as transações. Salve-o como CSV. Cada linha representará uma divisão (lançamento) de uma transação. Mais tarde, você precisará agrupar as linhas por transação para a conversão.
Plano de Contas e Outras Listas: O QuickBooks Online pode exportar o plano de contas via Contabilidade → Plano de Contas → Ações em Lote → Exportar para Excel. Faça isso para obter os nomes e tipos de contas. Da mesma forma, exporte Clientes, Fornecedores, etc., se quiser transferir nomes para metadados.
API do QuickBooks Online (Opcional): Para uma abordagem programática, a Intuit fornece uma API REST para dados do QBO. Usuários avançados podem criar um aplicativo do QuickBooks Online (requer uma conta de desenvolvedor) e usar a API para buscar dados em JSON. Por exemplo, você poderia consultar o endpoint Account
para o plano de contas e os endpoints de relatório JournalEntry
ou GeneralLedger
para as transações. Existem SDKs em Python como python-quickbooks
que encapsulam a API. No entanto, usar a API envolve autenticação OAuth e é excessivo para uma migração única, a menos que você prefira a automação. Para a maioria dos casos, a exportação manual para CSV/Excel é mais simples e menos propensa a erros.
Etapa 2: Transformando e Limpando os Dados
Uma vez que você tenha os dados do QuickBooks em CSV (e/ou IIF), o próximo passo é convertê-los para o formato de livro-razão em texto simples do Beancount. Isso envolve analisar as exportações, mapear as contas do QuickBooks para um plano de contas do Beancount e formatar as transações na sintaxe do Beancount.
2.1 Analisando Exportações do QuickBooks com Python
Usar Python garantirá precisão e reprodutibilidade para a transformação. Descreveremos scripts para duas tarefas principais: importar o plano de contas e converter transações.
Importação e Mapeamento de Contas: É crucial configurar suas contas no Beancount antes de adicionar transações. As contas do QuickBooks têm tipos (Banco, Contas a Receber, Despesa, etc.) que mapearemos para a hierarquia do Beancount (Ativos, Passivos, Receitas, Despesas, etc.). Por exemplo, podemos usar um mapeamento como:
# Mapeia o tipo de conta do QuickBooks para a categoria raiz do Beancount
AccountTypeMap = {
'BANK': 'Ativos',
'CCARD': 'Passivos',
'AR': 'Ativos', # Contas a Receber como ativo
'AP': 'Passivos', # Contas a Pagar como passivo
'FIXASSET': 'Ativos',
'OASSET': 'Ativos', # Outro Ativo
'OCASSET': 'Ativos', # Outro Ativo Circulante
'LTLIAB': 'Passivos', # Passivo de Longo Prazo
'OCLIAB': 'Passivos', # Outro Passivo Circulante
'EQUITY': 'PatrimonioLiquido',
'INC': 'Receitas',
'EXP': 'Despesas',
'EXINC': 'Receitas', # Outras Receitas
'EXEXP': 'Despesas', # Outras Despesas
}
Usando a exportação IIF do QuickBooks Desktop ou o CSV da lista de contas do QBO, recuperamos o nome e o tipo de cada conta. Então:
-
Crie nomes de conta do Beancount: O QuickBooks às vezes usa dois pontos (
:
) nos nomes das contas para denotar subcontas (ex: "Ativos Circulantes:Conta Corrente"). O Beancount usa a mesma notação de dois pontos para hierarquia. Você pode frequentemente reutilizar o nome diretamente. Se os nomes das contas do QuickBooks não começarem com uma categoria, adicione a categoria mapeada. Por exemplo, uma conta do QuickBooks do tipoBANK
chamada "Conta Corrente" se tornaráAtivos:ContaCorrente
no Beancount. Uma contaEXP
(despesa) "Refeições" se tornaDespesas:Refeicoes
, etc. -
Garanta nomes válidos: Remova ou substitua quaisquer caracteres que possam confundir o Beancount. O QuickBooks permite caracteres como
&
ou/
nos nomes. É prudente remover ou substituir caracteres especiais (ex: substituir&
pore
, remover barras ou espaços). Além disso, garanta que todos os nomes de contas sejam únicos após a transformação – o QuickBooks pode ter permitido o mesmo nome de subconta sob pais diferentes, o que é aceitável, mas no Beancount o nome completo (com os pais) deve ser único. Se necessário, renomeie ou anexe um qualificador para distingui-los. -
Gere as aberturas de conta: No Beancount, cada conta usada deve ser aberta com uma diretiva
open
. Você pode escolher uma data anterior à sua primeira transação (ex: se estiver migrando dados de 2019–2023, use2018-12-31
ou uma data ainda anterior para todas as aberturas). O script escreverá linhas como:2018-12-31 open Ativos:ContaCorrente USD
2018-12-31 open Despesas:Refeicoes USD
para cada conta (assumindo que USD é a moeda principal). Use a moeda apropriada para cada conta (veja notas sobre múltiplas moedas abaixo).
Conversão de Transações: O principal desafio é converter a exportação de transações do QuickBooks (CSV) em lançamentos do Beancount. Cada transação do QuickBooks (fatura, conta, cheque, lançamento de diário, etc.) pode ter múltiplas divisões (linhas) que devem ser agrupadas em uma única transação do Beancount.
Usaremos o leitor de CSV do Python para iterar sobre as linhas exportadas e acumular as divisões:
import csv
from collections import defaultdict
# Lê todas as linhas do CSV do Diário exportado do 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)
# Agrupa as linhas por transação (assumindo que 'Trans #' identifica as transações)
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)
Agora transactions
é um dicionário onde cada chave é um ID/número de transação e o valor é a lista de divisões para essa transação. Em seguida, convertemos cada grupo para o formato Beancount:
def format_date(qb_date):
# Datas do QuickBooks podem ser como "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():
# Ordena as divisões pela ordem da linha, se necessário (geralmente já vêm em ordem)
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()
# Cabeçalho da transação
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # inclui o número de referência se disponível
output_lines.append(f" number: \"{first['Num']}\"")
# Itera sobre cada divisão/lançamento
for split in splits:
acct_name = split['Account'].strip()
# Mapeia o nome da conta do QuickBooks para a conta do Beancount (usando o mapeamento anterior)
beancount_acct = account_map.get(acct_name, acct_name)
# Determina o valor com sinal:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# Algumas exportações têm uma única coluna de Valor (negativo para créditos)
amt_str = amount
else:
# Se houver colunas separadas de Débito/Crédito
amt_str = debit if debit else f"-{credit}"
# Remove quaisquer vírgulas nos números por segurança
amt_str = amt_str.replace(",", "")
# Anexa a moeda
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# Memo/descrição para a divisão
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# Fim da transação – linha em branco
output_lines.append("")
Essa lógica de script faz o seguinte:
-
Formata a data para AAAA-MM-DD para o Beancount.
-
Usa o beneficiário (Name) e o memo para a narração da transação. Por exemplo:
2020-05-01 * "ACME Corp" "Pagamento de fatura"
(Se não houver beneficiário, você pode usar o Tipo de transação do QuickBooks ou deixar as aspas do beneficiário vazias). -
Adiciona metadados de
number
se houver um número de referência (nº do cheque, nº da fatura, etc.). -
Itera sobre cada linha de divisão:
- Mapeia o nome da conta do QuickBooks para a conta do Beancount usando um dicionário
account_map
(preenchido na etapa do plano de contas). - Determina o valor. Dependendo da sua exportação, você pode ter uma única coluna de Valor (com valores positivos/negativos) ou colunas separadas de Débito e Crédito. O código acima lida com ambos os casos. Ele garante que os créditos sejam representados como valores negativos para o Beancount (já que no Beancount, um único número com sinal é usado por lançamento).
- Anexa a moeda (assumindo USD, a menos que uma coluna de moeda diferente esteja presente).
- Escreve a linha de lançamento do Beancount com a conta, o valor e um comentário com o memo da linha. Por exemplo:
Ativos:ContaCorrente 500.00 USD ; Depósito
Receitas:Vendas -500.00 USD ; Depósito
Isso reflete um depósito de $500 (de Receitas para Conta Corrente).
- Mapeia o nome da conta do QuickBooks para a conta do Beancount usando um dicionário
-
Após listar todas as divisões, uma linha em branco separa a transação.
Tratamento de múltiplas moedas: Se seus dados do QuickBooks envolvem múltiplas moedas, inclua o código da moeda em cada lançamento (como mostrado acima). Garanta que as contas em moedas estrangeiras sejam abertas com essa moeda. Por exemplo, se você tem uma conta bancária em EUR, você geraria open Ativos:Banco:ContaCorrente EUR
e as transações nessa conta usarão EUR. O Beancount suporta livros-razão com múltiplas moedas e rastreará conversões implícitas, mas você pode precisar adicionar entradas de preço para taxas de câmbio se quiser a conversão para uma moeda base nos relatórios. Também é recomendado declarar sua moeda operacional principal no topo do arquivo Beancount (ex: option "operating_currency" "USD"
).
Executando a conversão: Salve o script Python (por exemplo, como qb_para_beancount.py
) e execute-o em seus arquivos exportados. Ele deve produzir um arquivo .beancount
contendo todas as contas e transações.
2.2 Lidando com Casos Especiais e Limpeza de Dados
Durante a transformação, esteja atento a estes problemas comuns e como resolvê-los:
-
Incompatibilidades de Nomes de Contas: O QuickBooks pode ter nomes de contas que entram em conflito com os nomes hierárquicos do Beancount. Por exemplo, o QuickBooks pode ter duas contas-pai diferentes, cada uma com uma subconta chamada "Seguro". No Beancount,
Despesas:Seguro
deve ser único. Resolva isso renomeando uma delas (ex: "Seguro-Veiculo" vs "Seguro-Saude") antes da exportação ou mapeie-as para contas Beancount únicas em seu script. Convenções de nomenclatura consistentes (sem caracteres especiais e uso de hierarquia) economizarão dores de cabeça. Use a abordagem de arquivo de remapeamento, se necessário: mantenha um CSV ou dicionário de nome antigo → novo nome Beancount e aplique-o durante a conversão (nosso código de exemplo usa umaccount_map
e poderia carregar substituições de um arquivo). -
Datas e Formatos: Garanta que todas as datas estejam formatadas de forma consistente. O script acima normaliza M/D/A para o formato ISO. Além disso, cuidado com problemas de ano fiscal vs ano calendário se seu período de cinco anos cruzar o final de um ano. O Beancount não se importa com limites de ano fiscal, mas você pode querer dividir os arquivos por ano mais tarde por conveniência.
-
Precisão Numérica: O QuickBooks lida com moeda com centavos, então trabalhar com centavos geralmente está bom. Todos os valores devem, idealmente, ter duas casas decimais no CSV. Se algum valor se transformou em inteiro (sem decimal) ou tem vírgulas/parênteses (para negativos), limpe-os no script (remova vírgulas, converta
(100.00)
para-100.00
, etc.). A exportação CSV, se feita corretamente (conforme as instruções), já deve evitar esses problemas de formatação. -
Valores Negativos e Sinais: Relatórios do QuickBooks às vezes mostram negativos como
-100.00
ou como(100.00)
ou até mesmo--100.00
em certas exportações do Excel. A etapa de limpeza deve lidar com isso. Garanta que os débitos e créditos de cada transação se equilibrem para zero. O Beancount aplicará isso (se não estiver balanceado, ele lançará um erro na importação). -
Duplicatas de Transações: Se você teve que exportar transações em lotes (ex: ano a ano ou conta a conta), tenha cuidado para mesclá-las sem sobreposição. Verifique se a primeira transação de um ano não é também a última do lote anterior, etc. É fácil duplicar acidentalmente algumas transações nas fronteiras. Se suspeitar de duplicatas, você pode ordenar as entradas finais do Beancount por data e procurar por entradas idênticas, ou usar as tags de transação únicas do Beancount para pegá-las. Uma estratégia é incluir os números de transação do QuickBooks como metadados (ex: usar o
Trans #
ou número da fatura como uma tagtxn
ou metadadosquickbooks_id
) e então garantir que não existam duplicatas desses IDs. -
Divisões não Balanceadas / Contas de Suspensão: O QuickBooks pode ter casos estranhos como uma transação com um desequilíbrio que o QuickBooks ajustou automaticamente para uma conta de “Patrimônio de Saldo Inicial” ou “Lucros Retidos”. Por exemplo, ao configurar saldos iniciais de contas, o QuickBooks frequentemente lança diferenças para uma conta de Patrimônio. Isso aparecerá nas transações exportadas. O Beancount exigirá um balanceamento explícito. Você pode precisar introduzir uma conta de Patrimônio para saldos iniciais (comumente
PatrimonioLiquido:Saldos-Iniciais
) para espelhar o QuickBooks. É uma boa prática ter um lançamento de saldo inicial no primeiro dia do seu livro-razão que estabelece os saldos iniciais de todas as contas (veja a Etapa 5). -
Casos Especiais de Múltiplas Moedas: Se estiver usando múltiplas moedas, a exportação do QuickBooks pode listar todos os valores na moeda local ou em sua moeda nativa. Idealmente, obtenha os dados na moeda nativa para cada conta (os relatórios do QuickBooks Online geralmente fazem isso). No Beancount, cada lançamento carrega uma moeda. Se o QuickBooks forneceu taxas de câmbio ou uma conversão para a moeda local, você pode ignorá-las e confiar nas entradas de preço do Beancount. Se o QuickBooks não exportou taxas de câmbio, você pode querer adicionar manualmente registros de preço (ex: usando a diretiva
price
do Beancount) para datas-chave para corresponder à avaliação. No entanto, para a integridade básica do livro-razão, é suficiente que as transações se equilibrem em suas moedas originais – ganhos/perdas não realizados não precisam ser registrados explicitamente, a menos que você queira os mesmos relatórios. -
Contas a Receber / Contas a Pagar: O QuickBooks rastreia detalhes de faturas e contas (datas de vencimento, status de pagamento, etc.) que não serão totalmente transferidos em um livro-razão simples. Você obterá as transações de Contas a Receber e a Pagar (faturas aumentando C/R, pagamentos diminuindo C/R, etc.), mas não os documentos das faturas ou os saldos de clientes por fatura. Como resultado, após a migração, você deve verificar se os saldos de suas contas de C/R e C/P no Beancount são iguais aos saldos em aberto de clientes/fornecedores no QuickBooks. Se precisar rastrear faturas, pode usar os metadados do Beancount (ex: incluir uma tag ou link
fatura
). Os números das faturas do QuickBooks devem ter vindo nos camposNum
ouMemo
– nosso script preserva oNum
comonumber: "..."
nos metadados da transação. -
Contas Inativas ou Fechadas: A exportação IIF pode incluir contas inativas (se você optou por incluí-las). Não há problema em importá-las (elas apenas não terão transações e um saldo zero se estiverem verdadeiramente inativas). Você pode marcá-las como fechadas no Beancount após a data da última transação com uma diretiva
close
. Isso mantém seu livro-razão organizado. Por exemplo:2023-12-31 close Despesas:ContaAntiga ; fechada após a migração
Isso é opcional e principalmente para fins de limpeza.
Ao limpar e mapear cuidadosamente os dados como acima, você terá um arquivo de livro-razão Beancount que espelha estruturalmente seus dados do QuickBooks. O próximo passo é verificar se ele também espelha numericamente o QuickBooks.
Etapa 3: Validação e Reconciliação dos Dados
A validação é uma etapa crítica em uma migração de dados contábeis. Precisamos garantir que o livro-razão do Beancount corresponda aos livros do QuickBooks centavo por centavo. Várias estratégias e ferramentas podem ser usadas:
3.1 Reconciliação do Balancete de Verificação
Um relatório de balancete de verificação lista os saldos finais de todas as contas (com débitos e créditos ou positivo/negativo indicado) e deve totalizar zero. Gerar um balancete de verificação em ambos os sistemas para a mesma data é a maneira mais rápida de confirmar a precisão geral.
-
No QuickBooks: Gere um relatório de Balancete de Verificação para o último dia do ano final (ex: 31 de dezembro de 2023). Este relatório mostra o saldo de cada conta. Exporte-o ou anote os números principais.
-
No Beancount: Use os relatórios do Beancount para gerar um balancete de verificação. Um método fácil é via linha de comando:
bean-report migrado.beancount balances
O relatório
balances
é um balancete de verificação que lista todas as contas e seus saldos. Você também pode abrir o arquivo no Fava (a interface web do Beancount) e olhar a seção Balances ou Balance Sheet. O saldo de cada conta no Beancount deve corresponder ao balancete de verificação do QuickBooks. Por exemplo, se o QuickBooks mostra Contas a Receber = 5,000 (débito). SeReceita de Vendas = 200,000 (crédito, que pode ser exibido como -200,000 se usar um balancete que apresenta créditos como negativos).
Se houver discrepâncias, identifique-as:
- Verifique se uma conta inteira está faltando ou a mais (esquecemos uma conta ou incluímos uma que já estava fechada antes do período de migraç ão?).
- Se um saldo estiver incorreto, aprofunde a análise: o QuickBooks pode gerar um Relatório Rápido de Conta ou detalhe do razão para essa conta, e você pode comparar com o registro do Beancount para essa conta (
bean-report migrado.beancount register -a NomeDaConta
). Às vezes, as diferenças vêm de uma transação ausente ou duplicada.
Verifique também se a soma de todas as contas é zero no balancete de verificação do Beancount (ele imprime um total que deve ser zero ou muito próximo de zero). O Beancount impõe a partida dobrada, então se você tiver algum desequilíbrio diferente de zero, significa que ativos menos passivos-patrimônio líquido não totalizaram zero, indicando um problema (o que o QuickBooks normalmente também não permitiria, mas poderia acontecer se alguns dados fossem perdidos).
3.2 Comparações de Saldo de Contas
Além do balancete de verificação, você pode comparar demonstrações financeiras específicas:
-
Balanço Patrimonial: Gere um Balanço Patrimonial do QuickBooks para a data final e um balanço patrimonial do Beancount (
bean-report migrado.beancount balsheet
). Isso é semelhante ao balancete de verificação, mas organizado por Ativos, Passivos e Patrimônio Líquido. Os números devem se alinhar por categoria. Para uma verificação mais granular, compare os totais das contas principais: caixa, contas a receber, ativos fixos, contas a pagar, patrimônio líquido, etc. -
Demonstração de Resultados (DRE): Gere uma DRE para o período de cinco anos (ou ano a ano) no QuickBooks e no Beancount (
bean-report migrado.beancount income
para uma DRE do período completo). O lucro líquido do Beancount deve ser igual ao do QuickBooks para cada período. Se você migrou todos os cinco anos, o lucro líquido acumulado deve corresponder. Você também pode comparar os totais de receitas e despesas individuais para garantir que nenhuma categoria foi omitida ou duplicada. -
Amostragem Aleatória de Transações: Escolha algumas transações aleatórias (especialmente de cada ano e de cada conta principal) e verifique se elas foram migradas corretamente. Por exemplo, encontre uma fatura de 3 anos atrás no QuickBooks e depois procure por seu valor ou memo no arquivo Beancount (como todas as transações são texto, você pode abrir o arquivo
.beancount
em um editor de texto ou usar ferramentas de busca). Verifique se a data, valores e contas correspondem. Isso ajuda a capturar quaisquer problemas de formatação de data ou contas mal mapeadas.
3.3 Verificações de Integridade Automatizadas
Aproveite as próprias ferramentas de validação do Beancount:
-
bean-check: Execute
bean-check migrado.beancount
. Isso analisará o arquivo e relatará quaisquer erros de sintaxe ou de balanceamento. Se o script esqueceu algo como uma conta não aberta ou uma transação não balanceada,bean-check
irá sinalizá-lo. Uma passagem limpa (sem saída) significa que o arquivo é, pelo menos, internamente consistente. -
Asserções de Saldo: Você pode adicionar asserções de saldo explícitas no livro-razão para contas-chave como uma verificação extra. Por exemplo, se você sabe o saldo da conta bancária em uma determinada data, adicione uma linha:
2023-12-31 balance Ativos:Banco:ContaCorrente 10000.00 USD
Entãobean-check
garantirá que, no livro-razão, a partir daquela data, o saldo seja de fato $10.000. Isso é opcional, mas pode ser útil para contas de alta importância. Você poderia pegar os saldos finais do QuickBooks (ex: final de cada ano) e declará-los no arquivo Beancount. Se alguma asserção falhar, o Beancount relatará uma diferença. -
Acompanhamento do Balancete de Verificação: Se preferir, você pode fazer uma verificação período a período. Para cada ano, compare a variação líquida. Por exemplo, o lucro líquido no QuickBooks 2020 vs Beancount 2020, etc., para garantir que cada ano fechou corretamente no patrimônio líquido (o QuickBooks automaticamente transfere o lucro líquido para Lucros Retidos a cada novo ano; no Beancount você apenas verá o patrimônio líquido acumulado). Se vir diferenças, isso pode indicar um problema nos dados de um ano específico.
-
Contagens e Duplicatas de Transações: Conte o número de transações no QuickBooks vs Beancount. O QuickBooks não mostra uma contagem direta facilmente, mas você pode estimar contando linhas no CSV (cada cabeçalho de transação vs divisões). No Beancount, uma maneira rápida é contar as ocorrências de
txn
ou* "
no arquivo. Elas devem ser iguais ou ligeiramente acima do QuickBooks (se você adicionou transações de saldo inicial ou ajustes). Uma incompatibilidade significativa significa que algo pode ter sido omitido ou duplicado. Nosso uso de IDs únicos nos metadados pode ajudar: se suspeitar de duplicatas, procure no arquivo Beancount pelo mesmo número de cheque ou fatura aparecendo duas vezes quando não deveria. -
Status de Reconciliação: Incluímos um metadado
rec: "y"
ou"n"
com base no status de compensado do QuickBooks em nosso script (comorec
no exemplo). Isso não é um recurso padrão do Beancount (o Beancount não rastreia compensado/pendente da mesma forma que o Ledger), mas pode ser um metadado útil. Você pode verificar se todas as transações que foram reconciliadas no QuickBooks estão presentes. Em última análise, reconciliar as contas bancárias no Beancount novamente (usando seus extratos) pode ser a prova final de que nada está faltando.
Ao realizar essas validações, você constrói confiança de que a migração preservou os dados. Leve o tempo que precisar nesta etapa – é mais fácil corrigir anomalias agora do que meses depois, quando os livros podem ser utilizados para decisões. Problemas comuns se a validação falhar: um saldo inicial de conta faltando, uma transação datada fora do intervalo ou uma inversão de sinal em um lançamento. Todos são corrigíveis uma vez identificados.
Etapa 4: Consolidando no Livro-Razão Beancount
Após limpar e validar, é hora de formalizar os dados em sua estrutura de livro-razão Beancount. “Consolidar” aqui significa tanto finalizar os arquivos do livro-razão quanto, potencialmente, enviá-los para um sistema de controle de versão para auditoria.