Arquivos QBO: INTU.BID, FITID e por que as importações falham
Um arquivo .qbo é OFX 1.02 com duas peculiaridades da Intuit parafusadas por cima. São essas duas que provocam as duas reclamações que as pessoas realmente têm. Tudo o que segue foi lido do próprio exportador deste conversor, src/export/qbo.ts — não da página de marketing de outro conversor.
O QuickBooks rotula minha importação com o banco errado
Por causa de um único número. Um arquivo .qbo carrega um elemento <INTU.BID>, e o QuickBooks o valida contra o registro da Intuit de bancos que mantêm um acordo Web Connect. Um identificador arbitrário é rejeitado, então todo conversor traz um identificador registrado como padrão — e o mais comum, 3000, pertence ao Wells Fargo. É por isso que um extrato do Chase pode ser importado sob um rótulo do Wells Fargo.
É cosmético. O identificador decide o nome e o logotipo da instituição exibidos durante a importação. Ele não decide onde os lançamentos vão parar — quem escolhe a conta real do QuickBooks, na caixa de diálogo de importação, continua sendo você. Um arquivo mal rotulado é confuso, não errado.
Este conversor usa 3000 como padrão pela mesma razão que todos usam, diz isso na página em vez de esconder, e deixa você substituir: o campo ID do banco QBO ao lado dos botões de download, ?intuBid= na API ou --intu-bid na CLI. Para descobrir o identificador do seu banco, abra um .qbo gerado pelo próprio banco e leia a linha <INTU.BID> — essa é a fonte fidedigna, e a única que vamos indicar a você.
Converti o extrato de novo e nada foi importado
É o <FITID> fazendo o trabalho dele. Cada lançamento carrega um identificador de lançamento da instituição financeira, e o QuickBooks lembra dos que já viu em uma conta — para sempre. Um lançamento cujo FITID já foi importado antes é ignorado em silêncio. É isso que impede que uma reimportação duplique os lançamentos da sua conta.
O identificador tem que ser, então, estável entre exportações de um mesmo extrato e único dentro de uma mesma exportação. Aqui ele é sha1(número da conta | data | valor em centavos | primeiros 48 caracteres da descrição), truncado em 24 caracteres hexadecimais, com um contador -1, -2 acrescentado ao final quando um extrato realmente lista o mesmo lançamento duas vezes no mesmo dia.
A consequência que vale conhecer: o identificador deriva do lançamento, então, se você corrigir um valor antes de exportar, o FITID daquela linha muda e o QuickBooks o trata como um lançamento novo. Corrija primeiro, importe uma vez só.
Os campos que decidem se o arquivo chega a abrir
| Elemento | O que faz | O que este conversor escreve |
|---|---|---|
INTU.BID | Identificador da instituição; precisa ser um que a Intuit reconheça | 3000, a menos que você o substitua |
FITID | Identificador por lançamento; evita duplicatas na reimportação | sha1 do lançamento, estável |
BANKID | Número de roteamento bancário | 000000000, a menos que você o substitua |
ACCTTYPE | CHECKING / SAVINGS / MONEYMRKT / CREDITLINE | sua escolha; determina o conjunto de mensagens |
DTSTART / DTEND | Período que a lista de lançamentos cobre | ampliado para abranger todas as linhas do arquivo |
TRNAMT | Valor com sinal | negativo para saídas de dinheiro |
Fonte: src/export/qbo.ts.
Um cartão de crédito não é uma conta bancária
O OFX coloca os extratos de cartão em outro conjunto de mensagens: <CREDITCARDMSGSRSV1> com <CCACCTFROM>, e não <BANKMSGSRSV1> com <BANKACCTFROM>. Exporte um extrato de cartão como Conta corrente e o QuickBooks se oferece para importá-lo em uma conta bancária. Escolher Cartão de crédito troca o envelope inteiro, não só um rótulo.
DTSTART e DTEND podem descartar linhas em silêncio
Um importador tem o direito de ignorar lançamentos com data fora do período declarado, e os extratos listam com toda a naturalidade uma linha contabilizada um dia antes de o período começar. Este conversor amplia o período para cobrir todos os lançamentos que de fato estão no arquivo — um bug que encontramos e corrigimos, não uma funcionalidade.
O arquivo parece malformado para um validador XML
É para parecer mesmo. OFX 1.02 é SGML, não XML: os elementos folha não têm tag de fechamento, então <TRNAMT>-84.97 termina na quebra de linha. Um validador que espera </TRNAMT> está lendo a especificação errada. O bloco de cabeçalho acima de <OFX> é, do mesmo jeito, feito de simples linhas de chave–valor.
Os acentos saem achatados
O cabeçalho declara ENCODING:USASCII, então o corpo tem que ser ASCII de verdade. Os caracteres latinos com acento são transliterados (Zürich → Zurich); tudo o que não tem equivalente em ASCII vira ?. Os nomes de beneficiário, além disso, são cortados em 32 caracteres — o limite do OFX para <NAME> — e a descrição completa é escrita em <MEMO>, que é para onde foi o resto de uma descrição truncada.
O QuickBooks Online também aceita CSV — outra história
O arquivo .qbo é para o Web Connect do QuickBooks Desktop. O envio manual do QuickBooks Online, em vez disso, aceita CSV, e admite exatamente duas estruturas de colunas: três colunas (Date, Description, Amount, saídas de dinheiro em negativo) ou quatro (Date, Description, Credit, Debit). Duas coisas nisso surpreendem todo mundo:
- O sentido das 4 colunas é invertido. A instrução da própria Intuit é colocar os pagamentos em
Credite os depósitos emDebit— a visão do livro-razão sobre a conta, não a do banco. Arquivos montados da maneira “óbvia” são importados com todos os sinais trocados, e como a importação funciona, ninguém percebe até a conciliação. - Os envios são limitados a 1.000 linhas e 350 KB. Um extrato mais longo tem que ser dividido em partes, cada uma com a sua própria linha de cabeçalho.
A exportação CSV deste conversor tem uma predefinição QuickBooks Online que produz as duas estruturas de colunas no sentido da Intuit, remove as colunas com que o QuickBooks engasgaria e divide automaticamente os extratos longos em partes importáveis.
O que esta página não vai dizer a você
Qual INTU.BID corresponde ao seu banco específico. Circulam listas publicadas, elas são extraoficiais, e um identificador errado produz exatamente a confusão que esta página existe para explicar. Leia o número de um .qbo emitido pelo seu próprio banco.