Archivos QBO: INTU.BID, FITID y por qué fallan las importaciones
Un archivo .qbo es OFX 1.02 con dos peculiaridades de Intuit atornilladas encima. Esas dos son las que provocan las dos quejas que la gente tiene de verdad. Todo lo que sigue está sacado del propio exportador de este conversor, src/export/qbo.ts — no de la página de marketing de otro conversor.
QuickBooks etiqueta mi importación con el banco equivocado
Por un solo número. Un archivo .qbo lleva un elemento <INTU.BID>, y QuickBooks lo coteja con el registro de Intuit de bancos que tienen un acuerdo Web Connect. Un identificador arbitrario se rechaza, así que todos los conversores incluyen uno registrado como valor por defecto — y el más habitual, 3000, pertenece a Wells Fargo. Por eso un extracto de Chase puede importarse bajo una etiqueta de Wells Fargo.
Es cosmético. El identificador decide el nombre y el logotipo de la entidad que se muestran durante la importación. No decide dónde acaban los movimientos — la cuenta real de QuickBooks la sigue eligiendo usted en el cuadro de diálogo de importación. Un archivo mal etiquetado resulta confuso, no incorrecto.
Este conversor usa 3000 por defecto por la misma razón que todos, lo dice en la página en lugar de ocultarlo y permite sustituirlo: el campo ID de banco QBO junto a los botones de descarga, ?intuBid= en la API o --intu-bid en la CLI. Para encontrar el identificador de su banco, abra un .qbo generado por el propio banco y lea la línea <INTU.BID> — esa es la fuente fidedigna, y la única a la que le remitiremos.
Volví a convertir el extracto y no se importó nada
Es <FITID> haciendo su trabajo. Cada movimiento lleva un identificador de movimiento de la entidad financiera, y QuickBooks recuerda los que ya ha visto en una cuenta — de forma permanente. Un movimiento cuyo FITID se importó antes se omite en silencio. Eso es lo que impide que una reimportación duplique su registro.
El identificador tiene que ser, entonces, estable entre exportaciones de un mismo extracto y único dentro de él. Aquí es sha1(número de cuenta | fecha | importe en centavos | primeros 48 caracteres de la descripción), truncado a 24 caracteres hexadecimales, con un contador -1, -2 añadido al final cuando un extracto lista realmente el mismo movimiento dos veces el mismo día.
La consecuencia que conviene conocer: el identificador se deriva del movimiento, así que si corrige un importe antes de exportar, el FITID de esa fila cambia y QuickBooks lo trata como un movimiento nuevo. Corrija primero, importe una sola vez.
Los campos de los que depende que el archivo llegue a abrirse
| Elemento | Qué hace | Qué escribe este conversor |
|---|---|---|
INTU.BID | Identificador de la entidad; debe ser uno que Intuit reconozca | 3000, salvo que lo sustituya |
FITID | Identificador por movimiento; evita duplicados al reimportar | sha1 del movimiento, estable |
BANKID | Número de ruta bancaria | 000000000, salvo que lo sustituya |
ACCTTYPE | CHECKING / SAVINGS / MONEYMRKT / CREDITLINE | su elección; determina el conjunto de mensajes |
DTSTART / DTEND | Periodo que cubre la lista de movimientos | ampliado para abarcar todas las filas del archivo |
TRNAMT | Importe con signo | negativo para las salidas de dinero |
Fuente: src/export/qbo.ts.
Una tarjeta de crédito no es una cuenta bancaria
OFX coloca los extractos de tarjeta en otro conjunto de mensajes: <CREDITCARDMSGSRSV1> con <CCACCTFROM>, y no <BANKMSGSRSV1> con <BANKACCTFROM>. Exporte un extracto de tarjeta como Cuenta corriente y QuickBooks se ofrecerá a importarlo en una cuenta bancaria. Elegir Tarjeta de crédito cambia el sobre entero, no solo una etiqueta.
DTSTART y DTEND pueden descartar filas en silencio
Un importador está en su derecho de ignorar los movimientos con fecha fuera del periodo declarado, y los extractos listan con toda normalidad una fila contabilizada el día antes de que empezara el periodo. Este conversor amplía el periodo para cubrir todos los movimientos que realmente están en el archivo — un error que encontramos y corregimos, no una funcionalidad.
El archivo le parece mal formado a un validador XML
Es lo previsto. OFX 1.02 es SGML, no XML: los elementos hoja no tienen etiqueta de cierre, así que <TRNAMT>-84.97 termina en el salto de línea. Un validador que espera </TRNAMT> está leyendo la especificación equivocada. El bloque de cabecera situado encima de <OFX> son, igualmente, simples líneas de clave–valor.
Los acentos salen aplanados
La cabecera declara ENCODING:USASCII, así que el cuerpo tiene que ser ASCII de verdad. Los caracteres latinos con acento se transliteran (Zürich → Zurich); todo lo que no tiene equivalente ASCII se convierte en ?. Los nombres de beneficiario, además, se recortan a 32 caracteres — el límite de OFX para <NAME> — y la descripción completa se escribe en <MEMO>, que es adonde fue a parar el resto de una descripción truncada.
QuickBooks Online también acepta CSV — harina de otro costal
El archivo .qbo es para Web Connect de QuickBooks Desktop. La carga manual de QuickBooks Online admite CSV en su lugar, y acepta exactamente dos estructuras de columnas: tres columnas (Date, Description, Amount, salidas de dinero en negativo) o cuatro (Date, Description, Credit, Debit). Dos cosas sorprenden a todo el mundo:
- El sentido de las 4 columnas está invertido. La propia instrucción de Intuit es poner los pagos en
Credity los depósitos enDebit— la vista del libro mayor sobre la cuenta, no la del banco. Los archivos construidos de la manera «evidente» se importan con todos los signos invertidos, y como la importación funciona, nadie se da cuenta hasta la conciliación. - Las cargas están limitadas a 1000 filas y 350 KB. Un extracto más largo hay que dividirlo en partes, cada una con su propia fila de cabecera.
La exportación CSV de este conversor incluye un ajuste preestablecido QuickBooks Online que produce las dos estructuras de columnas en el sentido de Intuit, quita las columnas con las que QuickBooks se atragantaría y divide automáticamente los extractos largos en partes importables.
Lo que esta página no le va a decir
Qué INTU.BID corresponde a su banco concreto. Circulan listas publicadas, son extraoficiales, y un identificador equivocado produce exactamente la confusión que esta página existe para explicar. Léalo de un .qbo emitido por su propio banco.