Encontré 25 transacciones duplicadas en mi app, las corregí a mano y construí la herramienta para no repetirlo
Uso mi propia app para mi propia plata, que es la única forma honesta de construir una. Hace unas semanas me senté a conciliar un mes y vi que mi libro estaba más pesado de lo que el banco decía. Veinticinco filas no debían estar ahí. Algunas eran fotos de comprobantes con el año equivocado, otras eran cuotas de tarjeta apiladas en un solo día, y las vergonzosas eran duplicadas comunes que una función que ya había lanzado tenía que agarrar. Resultó que esa función nunca corría de verdad. Acá va la historia entera y lo que me enseñó sobre por qué las apps de finanzas te duplican el gasto.
Estoy escribiendo en mi voz, no en la de Capi, porque esto es una confesión antes de ser una lección. Es fácil poner un panel prolijo delante de la gente y nunca mirar de cerca los propios números. El día que miré de cerca, agarré a mi producto mintiéndome por accidente, y el arreglo fue más simple y más humillante de lo que esperaba. Si alguna vez sospechaste que tu app de presupuesto infla los totales en silencio, así se descubre, y así se resuelve el problema de verdad.
¿Por qué tenía 25 transacciones duplicadas en mi propia app?
Se sumaron tres fallas a la vez. Un modelo de visión leyó un lote de fotos de comprobantes y puso el año equivocado en algunas, así que quedaron en el mes equivocado. Un PDF de tarjeta juntó todas las cuotas en la fecha de compra, así que un solo gasto en cuotas se vio como un cargo repetido. Y lo peor, mi propia etapa de dedupe marcaba las duplicadas en la vista previa de la importación pero nunca guardaba esa marca, así que el commit final releía los datos sin marca e insertaba todo igual. Sumando, veinticinco filas.
Ninguna era exótica. Cada una es ese tipo de falla chica y aburrida que se cuela cuando una función se prueba en pedazos y nunca de punta a punta con datos reales. El error de fecha apareció solo porque saco fotos de comprobantes en la calle y algunos estaban arrugados. El apilado de cuotas apareció solo porque importo un PDF que lista las cuotas. Y el fantasma del dedupe apareció solo porque subí un resumen que se superponía con uno que ya había mandado, que es exactamente la situación para la que existe el dedupe. Mi propio mes desprolijo era el caso de prueba que nunca había escrito.
¿Qué causa las transacciones duplicadas en las apps de finanzas?
Las causas comunes son un cargo pendiente y su versión liquidada ambos guardados, una reconexión que reimporta una ventana ya cargada, la misma cuenta agregada dos veces, una carga manual chocando con la importación automática y fallas de lectura como cuotas cayendo en una sola fecha. Cada una infla el total en silencio, y la mayoría de las apps no avisa cuando pasa. Te das cuenta solo cuando una categoría queda muy alta o el mes no coincide con el resumen.
Fui a fondo en la versión entre apps de esto en por qué las apps de presupuesto duplican transacciones, pero el resumen es que la duplicada es un problema de entrada, no del usuario. Los bancos mandan el mismo cargo dos veces en dos estados. Los agregadores vuelven a tirar ventanas superpuestas después de que se cae la conexión. Las migraciones entre apps, como la ola de gente que dejó Mint cuando cerró el 23 de marzo de 2024, se llevan las copias con ellas. La transacción es real una vez. La plomería es lo que convierte una en dos.
¿Cuál era el bug en mi propia función de dedupe?
Era el peor tipo de bug, de esos que parecen funcionar. La vista previa de la importación detectaba las filas duplicadas bien y las marcaba para saltear, así que en pantalla la función parecía operar. Pero la marca vivía solo en la memoria durante la vista previa y nunca se grababa de vuelta en la importación preparada. Cuando confirmaba, el commit releía los datos originales, sin marca, e insertaba cada fila, incluidas las que debían saltearse. El contador de dedupe quedaba en cero para siempre, y yo lo leía como ninguna duplicada, no como nada salteado.
Esa distancia entre parece-correcto y está-correcto es el peligro entero del software financiero. Un panel que muestra un número limpio suena autoritario aunque el número esté mal, un punto que defendí con calma en por qué las apps de finanzas mienten sobre tu gasto. Mi dedupe era puro teatro: la vista previa me tranquilizaba mientras el commit la ignoraba. El arreglo fueron tres líneas que persisten el resultado marcado para que el commit lea los mismos datos que mostró la vista previa. La lección me costó una tarde de limpieza manual y bastante orgullo.
¿Cómo corregir transacciones duplicadas a mano?
Casás cada duplicada por monto, fecha y comercio, después borrás una copia y dejás la otra, nunca las dos. Quedate con la versión que lleva la categoría correcta y cualquier nota que pusiste, y borrá la copia sin datos. Cuando la duplicada vino de una importación mala y no de un caso aislado, arreglá el origen para que la próxima importación no repita. Después de cada lote, reconciliá el total corregido con el resumen del banco antes de volver a confiar en el número.
Hacerlo a mano para veinticinco filas fue tedioso pero esclarecedor. Ordenar por monto en vez de fecha hizo saltar los pares, porque dos valores idénticos quedan uno al lado del otro mientras la vista por fecha los dispersa. Las fotos con fecha equivocada simplemente las moví al mes correcto. La pila de cuotas la borré y reimporté una vez que el lector quedó arreglado para repartir las cuotas por los meses en que de verdad caen. Al final volví a confiar en el libro, y tenía una lista precisa de todo lo que el software debía haber evitado.
¿Cómo saber si tu app de presupuesto está duplicando transacciones?
Compará el total de la app con el resumen del banco del mismo mes. Si la app marca más, ordená por monto en vez de fecha para revelar los pares idénticos, fijate si una versión pendiente y la liquidada de la misma compra sobrevivieron y buscá cuotas que caen todas en la fecha de compra. La duplicada empuja el total para arriba, la fila faltante lo baja. La dirección de la diferencia ya te dice qué problema tenés antes de cazar una sola fila.
Si querés un chequeo repetible, pasá por estos cinco pasos en cualquier app antes de confiar en sus números.
- Poné el total de la app y el total real del resumen de un mes uno al lado del otro. Total de la app mayor apunta a duplicada.
- Ordená por monto exacto, no por fecha, para que los valores idénticos queden juntos.
- Buscá un cargo pendiente y su gemelo liquidado que sobrevivieron a una sincronización.
- Mirá si hay cuotas que caen todas en la fecha de compra en vez de repartirse por los meses.
- Filtrá cualquier transacción con fecha fuera del período actual, la firma de una foto o escaneo que erró el año.
¿Qué apps de finanzas duplican transacciones, y cómo deduplican?
Toda app que usé produce duplicadas en las condiciones justas, y lo que las separa es si lo agarran y cómo. Las apps de sincronización se apoyan en el agregador para vincular pendiente y liquidado, que funciona hasta que una reconexión vuelve a tirar una ventana vieja. Las herramientas de archivo y chat dependen de reglas de casado en la importación. Acá va el panorama honesto de dónde vienen las copias en cada una y cómo cada una trata de frenarlas.
| App | Origen común de la duplicada | Cómo deduplica | Reimportar seguro | Precio (2026) |
|---|---|---|---|---|
| Capi | Resúmenes superpuestos al subir | Hash de la fila, saltea en el commit | Sí, por hash de fila | Gratis 30/mes; US$ 9,90/mes o US$ 69,90/año |
| YNAB | Carga manual más importación | Casa en la importación, vos aprobás | Casi siempre, al aprobar | US$ 14,99/mes o US$ 109/año |
| Monarch Money | Reconexión que vuelve a tirar | Casado por sync, fusión manual | Varía por configuración | US$ 99,99/año; Plus US$ 199/año |
| Copilot Money | Pendiente y liquidado ambos guardados | Auto-casado, vos confirmás | Gestionado por sync | US$ 13/mes o US$ 95/año |
| Mint a Credit Karma | Arrastre de migración | Limitado, muchas veces manual | No, copias arrastradas | Mint cerró en 2024 |
YNAB es el contraste más limpio con mi propia idea, y es un buen diseño. Te muestra las importaciones casadas y te hace aprobar, así que el humano es el último chequeo. Detallo dónde difieren Capi y YNAB en Capi vs YNAB. Copilot apuesta más fuerte al casado automático de pendiente a liquidado, suave cuando la conexión está sana y frágil cuando no, y comparo ese modelo en Capi vs Copilot Money. Ninguno está mal. Solo ponen el chequeo de seguridad en lugares distintos.
El resumen. Encontré 25 filas malas en mi propio libro: fotos de comprobantes con el año equivocado, cuotas apiladas en un solo día y duplicadas comunes que mi dedupe dejó pasar porque las marcaba en la vista previa pero nunca guardaba la marca. Las corregí a mano y después corregí el código para que el salteo corra en el commit, el lector reparta las cuotas por los meses y las fechas fuera de rango de fotos queden marcadas. La prueba que lo agarró fue usar la propia cosa.
¿Cómo evita Capi las transacciones duplicadas ahora?
Capi genera una huella de la fila de origen de cada transacción con un hash y compara las filas nuevas contra lo que ya está en tu libro, así un resumen reenviado o una exportación superpuesta importa solo las filas realmente nuevas. Después de la auditoría corregí la etapa que marcaba duplicadas pero no guardaba la marca, así que el salteo ahora corre en el commit, no solo en la vista previa. El lector de cuotas reparte las cuotas por los meses en que caen, y las fechas de foto fuera de un rango sano quedan marcadas en vez de guardadas.
Dónde Capi todavía te va a necesitar, dicho sin vueltas. El hash de fila protege bien las importaciones de archivo y resumen, pero una duplicada que cargás a mano y que no casa con nada en un archivo existente es tuya para agarrar, igual que en cualquier lado. La captura por foto y voz es rápida pero conviene una mirada antes de confirmar, ya que un modelo de visión todavía puede leer mal un comprobante gastado. Y ninguna app saca la necesidad de conciliar con el banco de vez en cuando. La promesa honesta es específica: reenviar el mismo resumen no te duplica el gasto, y el dedupe que ves en la vista previa es el dedupe que pasa de verdad. Si querés el cuadro más grande de cómo Capi maneja las importaciones, la guía de extracto a presupuesto lo cubre.
¿Qué me enseñó usar mi propio producto sobre construir herramientas financieras?
Que no podés confiar en una función que solo viste funcionar en una demo. El dedupe parecía correcto cada vez que probaba la vista previa, porque la vista previa era la parte que funcionaba. Solo corriendo mi mes real, superpuesto, fotografiado y lleno de cuotas por el flujo entero apareció la falla. Usar el propio producto no es un eslogan acá, es la única prueba que ejercita el camino desprolijo que los usuarios de verdad toman, y era la prueba que me había salteado.
El punto más profundo es que el software financiero gana confianza siendo verificable, no pareciendo pulido. Prefiero contarte que mi dedupe fue teatro por un tiempo y está corregido ahora que mostrarte una captura impecable. La razón entera por la que rastreo cada moneda y cada comprobante yo mismo, que escribí en la prueba de varias monedas como expat, es que los bugs solo aparecen con datos reales. Veinticinco filas me costaron una tarde. También dejaron el producto honestamente mejor, que es el canje que acepto siempre.
Chequeá tu propio mes en busca de duplicadas.
Mandá un resumen a Capi, y reenviar un período superpuesto no te va a duplicar el gasto, porque cada fila lleva una huella y el salteo corre en el commit.
Capi Gratis cubre 30 transacciones por mes. Capi Core es US$ 9,90 por mes o US$ 69,90 por año.
Preguntas frecuentes sobre transacciones duplicadas
¿Por qué tenía 25 transacciones duplicadas en mi propia app?
Se sumaron tres fallas. Un modelo de visión leyó un lote de fotos de comprobantes y puso el año equivocado en algunas, un PDF de tarjeta juntó todas las cuotas en la fecha de compra y se vieron repetidas, y lo peor, mi propia etapa de dedupe marcaba las duplicadas en la vista previa pero nunca guardaba esa marca, así que el commit releía los datos sin marca e insertaba todo. En total, 25 filas.
¿Qué causa las transacciones duplicadas en las apps de finanzas?
Las causas comunes son un cargo pendiente y su versión liquidada ambos guardados, una reconexión que reimporta una ventana ya cargada, la misma cuenta agregada dos veces, una carga manual chocando con la importación automática y fallas de lectura como cuotas cayendo en una sola fecha. Cada una infla el total en silencio, y la mayoría de las apps no avisa cuando pasa.
¿Cómo saber si tu app de presupuesto está duplicando transacciones?
Compará el total de la app con el resumen del banco del mismo mes. Si la app marca más, ordená por monto en vez de fecha para revelar los pares idénticos, fijate si una versión pendiente y la liquidada de la misma compra sobrevivieron y buscá cuotas que caen todas en la fecha de compra. La duplicada infla el total, la fila faltante lo baja.
¿Cómo evita Capi las transacciones duplicadas?
Capi genera una huella de la fila de origen de cada transacción con un hash y compara las filas nuevas contra lo que ya está en tu libro, así un resumen reenviado o una exportación superpuesta importa solo las filas realmente nuevas. Después de la auditoría también corregí la etapa que marcaba duplicadas pero no guardaba la marca, así que el salteo ahora corre de verdad en el commit, no solo en la vista previa.
¿Todas las apps de finanzas duplican transacciones?
La mayoría duplica en algún momento, porque la entrada es desprolija: cargos pendientes y liquidados, reconexiones, resúmenes superpuestos y migraciones entre apps crean copias. La diferencia es si la app lo agarra. Algunas casan en la importación, algunas te lo dejan a vos, y algunas, como aprendí de la mía, lanzan una etapa de dedupe que no corre. Ninguna es inmune por defecto.
¿Cómo eliminar transacciones duplicadas de forma segura?
Encontrá la duplicada real casando monto, fecha y comercio, después borrá una copia, no las dos. Quedate con la versión que lleva la categoría correcta y cualquier nota. Si la duplicada vino de una importación mala, arreglá el origen para que la próxima importación no repita. Siempre reconciliá el total corregido con el resumen del banco antes de confiar en él.