featNueva sub-pestaña "Cartolas" dentro de Carga: una grilla por fuente × mes que muestra de un vistazo qué cartolas ya están cargadas, cuáles faltan y cuáles todavía no corresponden (mes futuro), con selector de año.
v1.63.1septiembre 2026
fixUn correo de otra fuente del banco Scotiabank (ej. Visa Singular) sin líneas de cargo/abono reconocibles se aceptaba en silencio como una cartola Scotiabank vacía y nunca llegaba a probarse contra el parser correcto. Ahora se rechaza y la ingesta por correo sigue probando las fuentes siguientes.
v1.63.0septiembre 2026
fixCuando una cartola Santander Amex Intl traía dos "ABONO DE DIVISAS" idénticos el mismo día (mismo monto), el deduplicador del parser y el índice único de la base de datos descartaban el segundo en silencio. Ahora se cuentan las ocurrencias reales del PDF antes de deduplicar, igual que ya hacía el parser Visa/Amex nacional.
fixLos abonos de divisas de Amex Intl no conciliaban contra el egreso real de "Compra de Divisas" de la cuenta corriente porque el sistema exigía monto exacto; esa excepción (tasa de mercado vs. tasa fija) ya existía para Visa Intl pero nunca se extendió a Amex Intl.
featLas transacciones en dólares (Santander Visa/Amex Intl) ahora muestran, al pasar el mouse sobre el monto en pesos, el monto original en USD y la tasa de conversión usada.
v1.62.2septiembre 2026
fixLas cartolas de Scotiabank Cuenta Diaria descargadas directo del portal (formato "oficial", distinto al "imprimir como PDF" del navegador) no detectaban ningún movimiento: la descripción larga se envuelve en 2 líneas y la fila de fecha+monto quedaba sin texto de descripción, así que se descartaba en silencio. Ahora la descripción se reconstruye desde las líneas vecinas y ambos formatos de PDF funcionan.
v1.62.1septiembre 2026
fixLa sincronización automática de Santander (Fase 2, lectura del panel de Notification Center) abría el panel visiblemente dos veces y terminaba fallando con "panel_not_open" en casi todas las corridas, por una regresión de macOS 26 (Tahoe): el click por Accessibility al ítem del reloj dejó de responder de forma confiable. Se reemplazó por un click sintético a la coordenada real del ítem, que abre el panel de forma instantánea y consistente.
v1.62.0septiembre 2026
featLa pestaña de Categorías ahora abre por defecto en "Total" (antes abría en "Casita"), con el orden de tabs Total → Casita → Esteam.
fixLas filas de transacciones dentro del acordeón de categorías mostraban el nombre de la subcategoría en vez de la descripción real del gasto, porque el parser de Buddy guarda la subcategoría en el campo de descripción interno. Ahora se muestra la nota real de Buddy, y las filas quedan ordenadas por fecha descendente.
v1.61.2septiembre 2026
fixEl parser de Scotiabank CC clasificaba mal cargo/abono en las cartolas que llegan por correo cuando el layout de columnas se corría entre estados de cuenta — en agosto 2026 casi todos los abonos quedaron registrados como gasto. Ahora la columna se determina por la distancia relativa entre el monto y el saldo (constante entre formatos) en vez de una posición absoluta de caracter, y se reingestaron los estados afectados con el fix.
fixPOST /api/push/transaction ahora limita el body a 8 KB, para que un payload malformado no pueda escribir un blob sin límite en la cola.
infraIntento de leer movimientos de tarjeta directo desde Banca en Línea de Santander (Playwright) para que aparezcan en Buddy el mismo día de la compra, sin esperar el correo mensual — descartado: el gateway de login bloquea el navegador automatizado con 403 (WAF/antibot) antes de validar credenciales. Quedan como base para un futuro intento el dedup difuso por monto+fecha para movimientos sin ID de banco y el ícono 🌐 para distinguir el origen en el título de Buddy.
v1.61.0septiembre 2026
featNueva tarjeta de carga manual para Santander Amex Internacional — antes solo se podía ingresar por correo, así que borrar ese statement lo dejaba sin forma de recuperarlo manualmente.
v1.60.1septiembre 2026
fix"Re-escanear bandeja" ya no borra el historial completo de correos procesados — eso forzaba a descargar y descartar como duplicado casi los 90 días enteros en cada click. Ahora solo revisa correos genuinamente nuevos, mucho más rápido.
fixBorrar un extracto que llegó por correo ahora desmarca solo ese correo puntual como procesado, así un re-escaneo posterior lo vuelve a traer sin necesitar olvidar el historial completo.
v1.60.0septiembre 2026
featAl apretar "Re-escanear bandeja" ahora se ve el progreso en vivo: aparece un indicador de escaneo con barra de progreso, y cada correo detectado se muestra en Archivos como una fila "Descargando…" con su badge de fuente hasta que termina de ingresarse.
fixDescartar un correo pendiente de subida manual (ej. Mercado Pago) con "Ya lo subí" ahora queda registrado para siempre — antes reaparecía cada vez que se usaba "Re-escanear bandeja".
fixLos avisos de correos pendientes de subida manual ahora se muestran en cualquier carga de la página, no solo justo después de ciertas acciones.
v1.59.0septiembre 2026
featEn la vista de Archivos, ahora se puede hacer clic en el badge de fuente de cualquier fila para filtrar la lista por esa fuente (clic de nuevo para quitar el filtro); queda sincronizado con el selector existente.
featEse filtro por fuente (y la pestaña activa) ahora queda guardado en la URL, así que refrescar la página no lo pierde.
v1.58.3septiembre 2026
fixLos correos pendientes de subida manual de dominios que ya no aplican (ej. Santander) ahora se limpian solos en cada re-escaneo de bandeja, en vez de quedar visibles para siempre esperando un descarte manual fila por fila.
v1.58.2septiembre 2026
fixLas cartolas Visa/Amex internacionales ya no agregan la deuda total del período como una transacción falsa: el cupón "Comprobante de Pago" del pie de página se ignora en vez de leerse como un cargo más.
v1.58.1septiembre 2026
fixUn cargo ya encolado para Buddy (desde Fly.io) ahora muestra un ícono de reloj de arena en vez del botón normal, para que quede claro que ya se registró y no haya que volver a apretarlo mientras se aplica.
v1.58.0septiembre 2026
featEl botón "Registrar en Buddy" ahora también aparece en la tabla de Conciliación, en las filas sin contraparte en Buddy — antes solo estaba en el resumen de "Top cargos sin registrar".
featEsa misma tabla de "Top cargos sin registrar" ahora tiene el ícono para ver el PDF del extracto de cada cargo, igual que ya existía en Conciliación.
v1.57.0septiembre 2026
feat"Registrar en Buddy" ya funciona viendo la app en Fly.io, no solo corriendo local: el registro se encola y se aplica automáticamente en la Mac en los siguientes minutos.
infraNuevo proceso automático en la Mac que drena esa cola cada 5 minutos sin abrir el Notification Center, para no interrumpir mientras trabajas.
v1.56.2septiembre 2026
fixLos estados de cuenta de Buddy sincronizados para "Esteam" y "La Casita" ya no se marcan como duplicados en la vista de Estados de Cuenta cuando cubren el mismo mes de cierre — el nombre de archivo ahora incluye el presupuesto (esteam/casita), no solo la fuente y el mes.
v1.56.1agosto 2026
fixEl banner "pendiente de subida manual" solo se genera ahora para dominios que realmente entregan su estado de cuenta vía un link protegido por sesión (Mercado Pago); para el resto (Santander, Scotiabank, etc.) un correo sin PDF adjunto es ruido bancario rutinario (comprobantes de pago, notificaciones) y se descarta en silencio en vez de inundar el banner en cada reescaneo de bandeja.
v1.56.0agosto 2026
newNueva fuente "Santander Amex Intl": la cartola internacional (en dólares) ahora distingue Visa de Amex usando la misma etiqueta de producto junto al número de tarjeta, en vez de catalogar toda cartola internacional como Visa Intl.
v1.55.1agosto 2026
fixSantander Visa y Amex nacionales comparten el mismo encabezado; el parser ahora usa la etiqueta "W. LIMITED VISA"/"W.LIMITED AMEX" junto al número de tarjeta para rechazar cartolas cruzadas (ej. una Amex subida como Visa) en vez de importarlas silenciosamente con la fuente equivocada.
fixEl nombre de archivo con el que se guarda un estado de cuenta ahora usa el mes de cierre del período (no el de apertura): los ciclos de tarjeta de crédito casi siempre cruzan el límite de mes calendario, y tanto el banco como el usuario identifican la cartola por su mes de cierre.
v1.55.0agosto 2026
featNuevo badge de advertencia "duplicado" en la lista de Archivos: si dos estados de cuenta (de cualquier fuente) tienen el mismo nombre de archivo, se marcan ambos para detectar rápido casos como un PDF ingresado por error en la fuente equivocada.
v1.54.3agosto 2026
fixLas cartolas de Cuenta Corriente Santander recibidas por correo ya no se clasificaban por error como Visa Internacional: el parser de Visa Intl no rechazaba ese formato, así que "ganaba" antes de llegar al parser correcto de Cuenta Corriente.
fixCorregido el parser de Santander Visa: el cupón "COMPROBANTE DE PAGO" al pie del estado de cuenta repetía el monto total facturado junto a una fecha, y se importaba por error como una transacción real que inflaba el gasto.
fixEl script de sincronización con Buddy ahora avisa en el log cuando detecta un posible duplicado (mismo monto dentro de ±24h) cargado a mano en Buddy.app, ya que esas entradas manuales no comparten el UUID determinista que usa la detección automática.
v1.54.1agosto 2026
fixLa pestaña "Liquidaciones (beta)" ahora funciona también en producción (Fly.io) — antes quedaba bloqueada con "acceso no permitido" porque el middleware exigía loopback. Se mantiene la validación de mismo origen en las mutaciones (importar, reemplazar, borrar).
v1.54.0agosto 2026
featNueva pestaña "Liquidaciones (beta)": importa tus liquidaciones de sueldo en PDF y sigue la evolución mensual de sueldo base, bruto y líquido, con gráfico, historial por ítem, bonos anuales separados y una proyección a fin de año. Solo disponible en el equipo local mientras está en beta.
newNuevo endpoint interno /api/unregistered (protegido con token) para que los scripts de sincronización consulten cargos de Santander sin fuente asignada.
fixEl endpoint de sugerencia de categoría ahora recibe el comercio por POST en el cuerpo de la solicitud en vez de por parámetros en la URL, para que esos datos no queden en logs ni en el historial del navegador.
fixLas claves foráneas y el modo WAL de SQLite ahora se activan correctamente al conectar — la sintaxis anterior no era reconocida por el driver y quedaba silenciosamente sin efecto.
fixLas contraseñas de PDFs protegidos ya no se pasan como argumento de línea de comandos a qpdf, evitando que queden visibles en la lista de procesos del sistema.
v1.53.3agosto 2026
fixEl botón × para borrar transacciones de Buddy ahora funciona también cuando la transacción no tiene nota escrita — antes fallaba con "Datos incompletos" en ese caso.
v1.53.2agosto 2026
fixEl parser de Visa Santander ahora rechaza cartolas de Cuenta Corriente en vez de aceptarlas silenciosamente con cero transacciones — si se sube un PDF de Cuenta Corriente a la caja de Visa (o llega por correo), el sistema devuelve un error claro indicando la fuente correcta.
v1.53.1agosto 2026
fixEl endpoint de cola push ahora acepta datos estructurados de Apple Pay (merchant, amount, card, name) además del formato de texto de notificación anterior — el iOS Shortcut puede enviar los campos nativos de la transacción sin construir un texto sintético.
v1.53.0agosto 2026
featCola de notificaciones de compra para iOS Shortcuts: nuevos endpoints POST/GET/DELETE /api/push/transaction (protegidos con BUDDY_PUSH_KEY) reciben cargos capturados desde el iPhone en el momento exacto de la compra y los almacenan en Fly.io. El script santander-buddy-sync.py consume primero la cola del servidor antes de leer el Notification Center, eliminando las pérdidas de notificación cuando el Mac estaba durmiendo al momento del cargo.
v1.52.0agosto 2026
featPanel de automatizaciones: cada job ahora muestra una descripción en lenguaje simple de qué hace y de dónde saca la información; el detalle del poller IMAP se desglosa por banco/servicio (Santander, Scotiabank, Mercado Pago, etc.) en vez de un solo total agregado.
v1.51.0agosto 2026
featConciliación automática post-ingesta: tras un poll IMAP o un `/upload/buddy` que ingresen movimientos nuevos, el server reconcilia el mes en curso y, si la tasa de match cae bajo `ALERT_MATCH_RATE_MIN` (85% por defecto) o el monto sin registrar supera `ALERT_UNREGISTERED_MIN_CLP` ($50.000 por defecto), envía un correo con el top de cargos sin registrar. La conciliación deja de ser 100% pull: antes había que abrir la app para notar que faltaban cargos por registrar.
newNuevo puerto `notifier.Notifier` con adapters `SMTPNotifier` (correo saliente vía `smtp.mail.me.com`, reusando la misma app-password de `ICLOUD_IMAP_USER`/`ICLOUD_IMAP_PASSWORD` — sin secreto nuevo) y `DisabledNotifier` (no-op cuando `NOTIFY_CHANNEL` no es `email`). Las alertas solo se activan en producción (`FLY_APP_NAME` presente) para no spamear desde dev.
fixAnti-spam: nueva tabla `alert_state` registra la última vez que se notificó cada condición — no se reenvía la misma alerta más de una vez cada 24 horas, necesario porque el poller IMAP y `buddy-sync.sh` corren cada ~30 minutos.
v1.50.0agosto 2026
newNuevo endpoint `GET /api/suggest-category?merchant=&card=&amount=` que expone la sugerencia de Grupo/Categoría/Tipo/Scope de Buddy para un comercio, derivada del historial propio de conciliación (mismo comercio + tarjeta) — la misma inteligencia que ya prepoblaba el diálogo "Registrar en Buddy", ahora disponible como servicio de consulta reutilizable (funciona también en Fly.io, no requiere Buddy local).
featSe extrajo esa lógica a `application.SuggestCategoryUseCase` como única fuente de verdad: el diálogo "Registrar en Buddy" pasa a consumir el mismo caso de uso (sin cambio de comportamiento observable) y la respuesta incluye un `confidence` (`history` si hay historial, `heuristic` si no) más `matches` (cuántos pares del historial respaldan la combinación sugerida).
feat`santander-buddy-sync.py` consulta ese endpoint antes de insertar en Buddy en vez del diccionario `MERCHANT_CATEGORY` (vacío a propósito hasta ahora): con historial de confianza usa la categoría sugerida, sin historial sigue cayendo en "Unknown" para recategorizar a mano — la sugerencia mejora sola a medida que el usuario corrige. De paso resuelve la auto-sugerencia de scope pendiente en el backlog (sección "Distribución de ingresos"): el scope se deriva 1:1 del grupo sugerido.
v1.49.0agosto 2026
featPanel de salud de automatizaciones: nueva tarjeta "Automatizaciones" en el dashboard con un semáforo por job (poller IMAP, buddy-sync, santander-buddy-sync, leasity-sync) según la antigüedad de su último heartbeat — verde si corrió recientemente, ámbar si está atrasado, rojo si nunca corrió o su última corrida fue error. Antes una falla silenciosa (LaunchAgent sin cargar, permiso de Accessibility denegado, poller crasheado) solo se notaba días después al ver que "faltan datos".
newNuevo endpoint `POST /api/automation/heartbeat` (con lista blanca de jobs conocidos) y tabla `automation_runs`: cada job reporta timestamp, resultado ok/error e ítems procesados al terminar. El poller IMAP lo hace directo contra su propia DB; `buddy-sync.sh`, `santander-buddy-sync.py` y `leasity-sync.py` (nuevo helper compartido `buddy_writer.post_heartbeat`) hacen el POST a producción — se omite en `--dry-run`.
v1.48.1agosto 2026
fixEl banner de "Diferencias con producción" se cerraba solo un instante después de expandirlo. El fragmento que responde `/sync/check/status` incluía `hx-trigger="load, ..."`, y como se reemplaza a sí mismo (`hx-swap="outerHTML"`), cada respuesta volvía a disparar "load" apenas se insertaba, entrando en loop de recarga inmediata que pisaba el `<details>` recién abierto. Se quitó "load" del trigger del fragmento (se mantiene solo en el placeholder inicial), igual que ya hacía el indicador de sync de Buddy.
v1.48.0agosto 2026
featChequeo de sincronización local vs producción: al abrir la app en local aparece un indicador en el dashboard que compara, fuente por fuente, la cantidad de cartolas y transacciones cargadas y el porcentaje de conciliación histórico contra la instancia desplegada en Fly.io. Si hay diferencia, muestra el detalle exacto (ej. "Santander Visa — local 12 cartolas / 340 mov. (últ. 05/08/2026) · prod 11 cartolas / 310 mov. (últ. 01/08/2026)") en vez de solo avisar que algo no calza.
newNuevo endpoint `/api/sync-summary` que expone ese resumen (conteos, fechas y % de conciliación — nunca montos ni descripciones) para que cualquier instancia pueda compararse contra otra.
v1.47.1agosto 2026
fixEl diálogo "Registrar en Buddy" no tenía forma de elegir si el cargo es Gasto o Ingreso — el tipo se inferría en silencio del signo del monto bancario, casi siempre "expense" porque la lista de origen ("Top cargos sin registrar") son cargos. Se agregó un combo box "Tipo" explícito (Gasto/Ingreso), editable antes de guardar.
featEl Tipo se preselecciona igual que Grupo/Categoría: primero busca en el historial propio de conciliación cómo se registró antes ese mismo comercio+tarjeta (`guessBuddyFromHistory`, ahora extendido con el signo real de la transacción bancaria de esos matches) y, sin antecedentes, cae al signo del monto actual.
featWarning inline si Tipo y Categoría no calzan: el signo real que Buddy usa al sincronizar lo define la `HeadCategory` de la categoría elegida, no el selector de Tipo — el diálogo ahora avisa al vuelo (al cambiar cualquiera de los dos combos) cuando esa combinación quedaría inconsistente, antes de guardar.
v1.47.0agosto 2026
featCapa de etiquetado manual Personal/Casa por transacción (item del backlog "Distribución de ingresos entre presupuesto personal y casa"): cada transacción bancaria sin contraparte Buddy ("sin registrar") tiene un selector inline en Conciliación para marcarla como Esteam (personal) o Casita (hogar) a mano. Las transacciones que sí calzan con un registro Buddy siguen mostrando su presupuesto automáticamente (sin cambios).
featEl Balance Presupuestal (`/buddy-balance` y tab Resumen) ahora suma esas transacciones etiquetadas a mano a los mismos totales de Esteam/Casita que ya calcula desde los CSV de Buddy — es el paso que empieza a reducir la dependencia real de esos dos exports: con suficientes transacciones etiquetadas, el balance mensual puede calcularse solo desde los extractos bancarios.
featEtiquetado en bloque: un control nuevo arriba de la tabla de Conciliación permite elegir una fuente bancaria (ej. Edenred) y un presupuesto, y etiquetar de una vez todas sus transacciones "sin registrar" que todavía no tuvieran scope — evita tener que marcar a mano cientos de transacciones históricas ya cargadas.
v1.46.0agosto 2026
featIconos y colores fijos por categoría de Buddy en la pestaña Categorías — antes cada categoría solo tenía un puntito de color asignado por hash del nombre, sin ícono. Ahora Housing (naranja + casa), Food & drinks (teal + cubiertos), Transportation (azul + auto), Entertainment (morado + film), Lifestyle (rosa + bolsa), Income (verde + monedas) y Miscellaneous (ámbar + caja) tienen su propio ícono y color consistente, igual que en la app nativa de Buddy. Categorías fuera de este set siguen usando el color por hash de siempre, ahora con un ícono genérico.
v1.45.0agosto 2026
featNuevo campo `PaidBy` capturado desde la columna "Paid By" del export CSV de Buddy Casita (quién de la familia pagó cada gasto) — antes esa columna solo se usaba para validar que el CSV correspondía al presupuesto correcto y el valor por transacción se descartaba. Sienta la base para futuros reportes de "quién gastó qué" dentro de Casita; todavía no hay cambio visible en la UI.
v1.44.2agosto 2026
fixEl CSS de la app (`app.css`) se cargaba sin ningún parámetro de versión, así que el navegador podía quedarse indefinidamente con una copia cacheada tras cada deploy — algunos cambios visuales (como el fix del botón "Registrar en Buddy" deshabilitado de esta misma versión) no se veían hasta forzar una recarga dura. Ahora la hoja de estilos se pide como `app.css?v=vX.Y.Z`, así que cada release fuerza a los navegadores a traer la versión nueva.
v1.44.1agosto 2026
fixProlija la columna de acción del botón "Registrar en Buddy" en "Top cargos sin registrar" de Resumen: antes el ícono quedaba flotando lejos de la etiqueta de fuente por una columna de tabla sin ancho definido; ahora queda pegado, con un hover más marcado (fondo tipo pill en vez de solo cambio de color).
fixEl botón "Registrar en Buddy" ahora se deshabilita para traspasos entre cuentas propias (ej. "TEF 15318172-1 Santander Mio") que quedan huérfanos en "sin registrar" solo porque falta cargar el extracto de la contraparte — no son un gasto real, así que ya no invitan a registrarlos por error. El botón sigue visible pero atenuado, con un tooltip explicando por qué.
v1.44.0agosto 2026
featNuevo botón "Borrar de Buddy" (✕) en cada fila "solo en Buddy" de Conciliación (solo local, igual que "Registrar en Buddy"): borra la transacción directo de la base de datos local de Buddy sin tener que buscarla a mano en el iPhone — útil para las duplicadas o mal cargadas. Como gastos-conciliador no guarda el identificador interno de Buddy para estas filas, la transacción se ubica por fecha + monto + nota + grupo (los mismos datos ya visibles en la fila); si esa combinación no identifica una única transacción, se rehúsa a borrar en vez de arriesgarse a borrar la equivocada. Pide confirmación antes de borrar, y usa el mismo mecanismo de borrado lógico (ZREMOVED) que ya usa Buddy internamente, para que el borrado se sincronice bien a tus demás dispositivos.
v1.43.0agosto 2026
featNuevo botón "Registrar en Buddy" en cada fila del "Top cargos sin registrar" de Resumen (solo corriendo la app localmente, no en Fly.io): elige Grupo y Categoría en un diálogo y el cargo se inserta directo en la base de datos local de Buddy (mismo mecanismo que ya usan los scripts de sincronización automática por correo/notificación), sin tener que cargarlo a mano desde el iPhone. El diálogo pre-selecciona un Grupo/Categoría sugerido en vez de dejar caer la selección en lo primero alfabético: primero busca en tu propio historial de conciliación si ya categorizaste antes esa misma tarjeta + comercio (ej. "Mall Paseo Quilín" → Parking, sin configuración previa) y, si no hay antecedentes, cae a una regla genérica por tarjeta/comercio (ej. Amex → Esteam, "Cruz Verde" → Pharmacie). Tras registrarlo, la app resincroniza Buddy automáticamente para que el cargo pase a "cruzado" al instante, y abre Buddy brevemente en segundo plano para empujar el cambio a CloudKit.
v1.42.0agosto 2026
featNueva categoría "Gasto automático" en Conciliación: el interés y seguro que Scotiabank y Santander cobran automáticamente sobre la línea de crédito adosada ya no aparece como "cargo sin registrar" — se muestra aparte, porque es dinero real que sale de la cuenta pero no corresponde anotarlo en Buddy.
fixEl barrido automático de línea de crédito de Scotiabank (giro por sobregiro + repago) ya no queda huérfano en "sin registrar" cuando el banco descuenta el interés del giro antes de repagarlo — ahora se reconoce igual aunque el monto del repago no calce exacto con el del giro.
fixLos formularios de carga de Santander (Cuenta Corriente / Línea de Crédito) y Scotiabank (Cuenta Corriente / Diaria / Plus) ahora validan que el PDF corresponda a esa cuenta antes de aceptarlo — antes se podía subir por error la cartola de una cuenta en la caja de otra sin ningún aviso, ya que comparten el mismo formato de tabla.
v1.40.0julio 2026
featLos ~65 emojis usados como íconos funcionales (badges de fuente, estados vacíos, toasts, indicadores de estado en Conciliación y Categorías, botón de editar alias, etc.) se reemplazaron por un set propio de íconos SVG trazo-cian, extendiendo el mismo lenguaje visual del logo de la app — consistentes entre macOS/Windows/Linux/navegador.
v1.39.0julio 2026
featAtajos de teclado: / enfoca el buscador activo, 1-6 cambia entre las pestañas de resultados, Esc limpia la búsqueda enfocada, y g c salta directo a Carga.
featLas tablas de Integridad y de "top cargos" en Resumen ahora se pueden ordenar por columna, igual que Conciliación.
featLos estados vacíos (sin archivos, sin categorías, sin alias, etc.) ahora muestran un ícono y, cuando aplica, un botón para ir directo a Carga.
fixLos buscadores de Conciliación y Categorías ya no re-filtran en cada tecla — se agregó un pequeño debounce para tablas grandes.
fixTodas las animaciones ahora respetan la preferencia del sistema "reducir movimiento".
fixFeedback de carga (spinner) uniforme en todos los botones de acción (reintentar correo, marcar resuelto, guardar/borrar alias, eliminar/resubir en lote) — antes algunos no mostraban ningún indicador.
infraEl CSS de la aplicación (~2800 líneas) se movió de un <style> inline a una hoja de estilos cacheable en /static/css/app.css.
fixPulido visual general: el checkbox de "cobertura hasta" ya no se ve como el checkbox nativo del navegador, el foco de teclado usa un anillo cian consistente con el tema en vez del azul por defecto, y las etiquetas secundarias (AÑO, MES, encabezados de tabla) tienen mejor contraste.
fixLas tabs de sección y las tablas con scroll horizontal ahora muestran un desvanecido sutil en el borde cuando hay más contenido oculto, y las tarjetas de carga con títulos largos (ej. "Santander Visa Internacional") ya no desalinean su ícono y badges respecto a las demás.
v1.38.2julio 2026
fixCorregidos varios desbordes horizontales en móvil (probado en iPhone 14): la tabla de Balance Presupuestal en su página propia ahora tiene scroll horizontal contenido, las tarjetas Esteam/Casita se apilan en pantallas angostas, el selector de fuente de cobertura ya no se sale de la pantalla, y el encabezado con el título de la app se reordena en dos líneas en vez de desbordar.
v1.38.1julio 2026
fixPulido visual de la pestaña Categorías: cada categoría es ahora una tarjeta con borde de acento en su color, chevron animado al expandir, y aparición escalonada al cambiar de scope. El total del encabezado pasa a un formato tipo "stat tile" y % / promedio se muestran como chips consistentes con la flecha de variación.
v1.38.0julio 2026
featLa pestaña Categorías suma un buscador de texto libre que filtra categorías, subcategorías y transacciones a la vez, y un selector de orden (Monto / Nombre).
featBotón "Expandir todo / Colapsar todo" para abrir o cerrar de un golpe todo el árbol de categorías del scope visible.
featClick en cualquier transacción del detalle de una subcategoría salta directo a Conciliación con el buscador prellenado, para revisar si tiene contraparte bancaria.
v1.37.0julio 2026
featLa pestaña Categorías se rediseñó por completo: cada categoría ahora muestra su % del total y el promedio por transacción, tiene un color estable propio, y se puede expandir para ver sus subcategorías y, dentro de cada una, el detalle de las transacciones Buddy que la componen.
featAl seleccionar un mes específico, cada categoría muestra una flecha de variación (▲/▼) contra el mes anterior, o un indicador "nuevo" si no tuvo movimientos el mes pasado.
featSe agregó un segundo selector Gastos / Ingresos para ver también los ingresos por categoría, que antes no se mostraban en esta pestaña.
featCuando hay transacciones con categoría probablemente incorrecta (detectadas por el análisis de anomalías existente), aparece un aviso "⚠ N posibles mal categorizadas" que lleva directo al filtro de sospechosos en Conciliación.
v1.36.0julio 2026
featLa pestaña Categorías ahora permite alternar entre Total, Esteam y Casita para ver el gasto por categoría de cada presupuesto Buddy por separado, además del agregado combinado.
v1.35.1julio 2026
fixUn estado de cuenta Visa Internacional (en dólares) ingresado por correo se estaba clasificando como Visa nacional: el parser de Visa nacional no rechazaba el encabezado "ESTADO DE CUENTA INTERNACIONAL", así que ganaba la carrera antes de intentar el parser correcto y el estado quedaba guardado con 0 transacciones. Ahora se detecta y rechaza explícitamente ese encabezado para que la ingesta avance al parser de Visa Internacional.
fixEl parser de Visa Internacional tampoco reconocía las fechas de los estados de cuenta más recientes de Santander, que cambiaron de año de 2 dígitos (`22/05/26`) a 4 dígitos (`22/06/2026`) en las líneas de transacción.
v1.35.0julio 2026
featEl dashboard ahora se separa en dos vistas superiores: Inicio (conciliación, categorías, integridad, archivos, diccionario, balance presupuestal) y Carga (solo las cajas de subida de archivos por fuente). La vista activa se recuerda entre visitas y queda en la URL (`?view=carga`); al terminar de subir y conciliar automáticamente, salta a Inicio para mostrar los resultados.
featLas cajas de la vista Carga ahora se reordenan automáticamente por fecha de última carga, de más reciente a más antigua, para que las fuentes que acabas de actualizar queden siempre arriba.
fix`scripts/buddy-sync.sh` generaba el CSV temporal con `mktemp ... .csv`, lo que en macOS produce un nombre de archivo con el sufijo literal `.csv` en la plantilla en vez de como extensión real, rompiendo la ruta esperada por el resto del script.
fixSi `osascript` fallaba al cerrar Buddy tras el sync (por ejemplo por permisos de Automatización no concedidos), el proceso quedaba abierto sin aviso. Ahora usa `pkill` como respaldo.
v1.34.4julio 2026
fix`scripts/buddy-sync.sh` solo esperaba 15s a que Buddy sincronizara con el cloud cuando lo abría él mismo; si Buddy ya estaba corriendo (por ejemplo, mientras se ingresaban movimientos desde el iPhone) leía el SQLite local de inmediato y se perdían los cambios recién llegados por CloudKit. Ahora siempre espera, esté o no ya abierto.
v1.34.3julio 2026
infraNuevo `.env.example` documentando todas las variables de entorno (requeridas y opcionales), y nuevo `scripts/setup-buddy-sync.sh` que genera e instala el LaunchAgent de sync de Buddy automáticamente — antes había que escribir el plist a mano. Pensado para reconstruir el entorno local rápido tras reformatear el equipo.
fix`scripts/buddy-sync.sh` escribía su log en una ruta con el usuario del sistema hardcodeado (`/Users/estcontreras/...`) en vez de usar `$HOME`, lo que rompería el script en cualquier otra cuenta de usuario.
infraEl LaunchAgent de sync de Buddy ahora corre cada 30 minutos por defecto en vez de cada hora, para que los movimientos nuevos aparezcan más rápido en el dashboard.
v1.34.2julio 2026
fixLa hora de "última subida" en las tarjetas de fuentes se formateaba con `toLocaleString` del navegador, que ordena día/mes según el idioma del sistema — en un navegador en inglés mostraba mes/día en vez de día/mes. Ahora se construye siempre en formato DD/MM/AAAA HH:MM, sin depender del idioma del navegador.
fixAl usar el botón "Sync desde Buddy" en local, todas las tarjetas de fuentes perdían la hora de última subida y quedaban solo con la fecha. El script que reconstruye esas horas no llegaba a las tarjetas actualizadas fuera de banda (OOB) por htmx, por una particularidad de htmx 1.9 donde el elemento recibido en ese evento ya no está en el DOM.
v1.34.1julio 2026
fixEl script del LaunchAgent que sincroniza Buddy con producción (`scripts/buddy-sync.sh`) seguía usando la consulta SQL vieja, sin el ajuste de signo por categoría "Income" ni la exclusión de transferencias — el fix de v1.34.0 solo había llegado al botón manual, que no corre en Fly. Por eso "Gastos" aparecía en $0 en cada mes del Balance Presupuestal en producción.
fixLas transacciones de Buddy se agrupaban por el día calendario en UTC en vez de en hora de Chile — una transacción registrada a las 20:48 hora local (00:48 UTC del día siguiente) caía en el mes equivocado. Afectaba tanto al script de producción como al sync manual local.
v1.34.0julio 2026
featEl botón de sync de Buddy ahora muestra un indicador de estado del LaunchAgent (activo / inactivo / con error) junto con cuándo corrió por última vez, refrescado cada minuto.
fixEl sync automático de Buddy excluía mal las transferencias internas entre cuentas y no invertía el signo de las transacciones de categoría "Income", lo que inflaba egresos y desinflaba ingresos en el balance.
fixEl Balance Presupuestal ahora solo considera meses desde enero 2026 en adelante — datos previos no son relevantes para este balance y distorsionaban los totales acumulados.
fixLa fecha de "última subida" de cada tarjeta de fuente se mostraba en UTC crudo, sin convertir a la zona horaria del navegador — podía mostrar el día equivocado cerca de medianoche en Chile. Ahora se convierte igual que el resto de las fechas de la app.
v1.33.0julio 2026
featSync automático de Buddy desde SQLite local — ya no hace falta exportar el CSV a mano. El dashboard tiene un botón "⚡ Sync desde Buddy" (solo visible en local) que lee directamente la base de datos de Buddy y sube el historial completo de Esteam y La Casita. Un LaunchAgent corre cada hora: abre Buddy silenciosamente para forzar la sincronización con el cloud, lee el SQLite y sube todo a Fly.io.
v1.32.0julio 2026
newMercado Pago ahora se detecta en la ingesta por correo. El correo mensual no trae el PDF adjunto — trae un link que exige sesión iniciada en Mercado Pago — así que en vez de ignorarlo, el correo queda registrado como "pendiente de subida manual" en la vista de Archivos, con el asunto y la fecha, y un botón "Ya lo subí" para descartarlo una vez subido el extracto a mano.
v1.31.7julio 2026
fixLos montos negativos en rojo del Balance Presupuestal (y en el resto de la app) no mostraban el signo "-" antes del "$" — solo se distinguían por el color. Ahora siempre llevan el signo, además del color.
v1.31.6julio 2026
fixEl ícono "ver último PDF" de los cuadros de carga no se actualizaba al borrar, resubir o subir un extracto — vivía fuera del bloque que esas acciones refrescan. Ahora viaja como fragmento OOB de HTMX en cada acción relevante, así que siempre queda al día sin recargar la página.
fixEl ícono también podía apuntar a un extracto sin archivo realmente guardado (registros antiguos, o fuentes CSV como Mercado Pago/Edenred/Neat/Buddy) y el click daba 404. Ahora solo aparece si existe un archivo visible; la fecha de última subida se sigue mostrando siempre, tenga ícono o no.
v1.31.2julio 2026
featLos archivos subidos (manual o automáticamente por correo) ahora se guardan como "fuente-mes-año.ext" (ej. santander-visa-june-2026.pdf), usando el mismo nombre completo de fuente que aparece en los cuadros de carga y el período de facturación detectado, todo en minúsculas separado por guiones. Fallback al nombre original si no se detecta período.
v1.31.1julio 2026
featLa carga de Mercado Pago ahora también acepta la cartola en PDF ("Comprobante de movimientos"), además del export CSV — el formato se detecta automáticamente por la extensión del archivo.
v1.31.0julio 2026
featNuevo combo box junto a "Cobertura" para elegir manualmente qué fuente bancaria determina la fecha de corte, en vez de depender solo del cálculo automático.
featAviso ⚠ junto a la Tasa de match cuando el corte de cobertura cae justo en el cierre de ciclo de una tarjeta de crédito (Santander Visa/Amex/Intl, Visa Singular) — algunas compras de ese día pueden facturarse recién el mes siguiente.
fixEl giro automático que Scotiabank cubre con su línea de crédito adosada y repaga el mismo extracto ahora se reconoce como barrido interno, en vez de aparecer como dos cargos sin registrar.
v1.30.3julio 2026
fixLos traspasos entre Scotiabank Diaria y Copec Pay ahora se reconocen como movimiento interno en vez de aparecer duplicados en "cargos sin registrar".
v1.30.2julio 2026
fixEn el Balance Presupuestal, la columna "Ing. Totales" de Casita ahora se muestra en rojo cuando el ingreso total del mes es negativo.
v1.30.1julio 2026
fixLa tarjeta de Santander Visa Internacional ahora usa el mismo ícono de tarjeta (World Member) que Santander Visa en vez del logo genérico rojo del banco, y se renombró de "Santander Internacional" a "Santander Visa Internacional" para reflejar que es la misma tarjeta con cupo en pesos.
v1.30.0julio 2026
featCada tarjeta de fuente muestra ahora un ícono de documento junto a la fecha de última subida; al hacer click abre en una pestaña nueva el último extracto cargado para esa fuente.
fixEl aviso de estado de cuenta duplicado ahora muestra el período exacto (mes y año) ya cargado en vez de un mensaje genérico.
infraLos campos exclusivos de Buddy Budget (categoría, nota, presupuesto) se agruparon en un único campo dentro de la transacción, en vez de quedar sueltos y solo válidos para esa fuente.
v1.29.1julio 2026
fixEl parser de Santander Visa ahora rechaza cartolas de Cuenta Corriente en Dólares (cuenta 0-051-05-95156-8) con un error claro en lugar de importarlas silenciosamente como transacciones Visa.
v1.29.0julio 2026
infraRefactorización completa hacia arquitectura hexagonal (puertos y adaptadores): repositorios, poller IMAP, almacén de archivos, motor de migración y política de conciliación quedan ahora como puertos con implementaciones independientes. El código es más testeable y modular sin cambios visibles al usuario.
fixLa validación de subida ahora rechaza archivos con tipo MIME o contenido inválido antes de persistirlos, evitando que extractos corruptos lleguen a la base de datos.
fixEl orden de las fuentes en el poller IMAP es ahora estable entre reinicios del servidor.
infraSe agregan guardas de arquitectura en los tests para asegurar que las dependencias entre capas (dominio → aplicación → adaptadores) nunca se inviertan.
v1.28.1julio 2026
fixLa fecha de subida de los extractos ahora se guarda internamente en UTC (buena práctica de persistencia) y se muestra en la zona horaria del dispositivo del usuario, evitando desalineaciones de hora al comparar cargas entre distintas zonas.
v1.28.0julio 2026
featLas tarjetas de fuente del dashboard ahora muestran badges de estado: ✉ verde para fuentes con ingesta por correo validada, ✉ ⚠ ámbar para pendientes de validar, y ↑ manual gris para las de carga manual únicamente.
featSantander Cuenta Corriente se incorpora al poller IMAP: los extractos CTA enviados por correo desde santander.cl ahora se ingestarán automáticamente.
fixSe agrega import de charset en el servidor y poller IMAP para decodificar correctamente correos con caracteres especiales (tildes, eñes) en asunto o cuerpo.
fixEl poller IMAP ahora marca como procesados los correos cuya cartola tiene 0 movimientos (inicio de período), evitando reintentos innecesarios.
fixLa inferencia de pagos a tarjeta de crédito incorpora un paso adicional: cruza el monto pagado contra el total neto del extracto, cubriendo el caso en que el pago en efectivo aún no aparece en el período cargado.
fixTenpo y Mach ahora muestran el ícono de ojito para visualizar el PDF del extracto en la conciliación.
v1.27.1julio 2026
fixEl ícono PDF en cada fila de la conciliación ahora resalta correctamente la línea correspondiente para Scotiabank Plus (cartola email): el filtro de fecha reconoce el formato "DD / ene" de las cartolas enviadas por correo.
fixEl ícono PDF de Scotiabank Línea de Crédito ahora resalta la línea TOTAL CARGO en el PDF, en vez de buscar el label interno "Liquidación Intereses LC" que no existe en el documento.
v1.27.0julio 2026
featLa cartola Scotiabank CC enviada por correo (PDF oficial) ahora se ingesta correctamente: el parser reconoce el formato de fechas sin año ("DD / JUN") y maneja extractos AFP que comparten el mismo nombre de archivo.
fixLos PDFs encriptados con contraseña (Scotiabank) se desencriptan automáticamente con qpdf al guardarse en disco; el visor inline ya no solicita contraseña.
fixEl parser de Scotiabank Línea de Crédito ahora extrae correctamente las fechas de período desde el PDF oficial enviado por correo.
featCada archivo en la lista de Archivos muestra la fecha en que fue guardado.
v1.26.1julio 2026
fixEl poller ya no marca un correo como procesado si el parser no reconoció el formato (0 transacciones sin error ni duplicado): el Message-ID queda pendiente y se reintenta en el próximo ciclo.
featNuevo botón Reintentar correos en la lista de Archivos: libera todos los Message-IDs registrados como procesados para que el poller reintente los correos de los últimos 90 días en su próximo ciclo.
v1.26.0julio 2026
newNueva fuente Scotiabank Línea de Crédito: la liquidación mensual de intereses se ingesta automáticamente desde el correo (CartolaCliente.pdf) y también puede subirse manualmente. Cada liquidación genera una transacción con el cargo total del período.
fixLos PDFs ingresados por correo ahora se guardan en disco: el botón "ver" ya no daba 404 al abrir el visor desde la lista de archivos.
v1.25.1julio 2026
fixEl poller de correo ya no depende del flag "leído" de IMAP: ahora rastrea los correos procesados por Message-ID en la base de datos, así leer un correo en Mail.app no impide que se ingeste la cartola.
fixEl poller escanea los últimos 90 días en lugar de solo los mensajes no leídos, recuperando correos que llegaron antes de que la app los revisara.
v1.25.0junio 2026
featEl balance presupuestal Esteam/Casita ahora aparece directamente en la pestaña Resumen — sin necesidad de navegar a una página separada.
fixEl parser de Buddy ya no omite las transferencias "Aporte Casita" ni "Sobrante de Mes", incluyéndolas correctamente en el balance mensual.
v1.24.1junio 2026
fixEl poller de correo ahora reconoce PDFs de Copec Pay (copecpay.cl), Banco Chile Fan (bancochile.cl), MACH (mail.machbank.cl), Tenpo (tenpo.cl) y Visa Singular (vía scotiabank.cl).
v1.24.0junio 2026
featIngesta automática de PDFs por correo — los estados de cuenta de Santander y Scotiabank que llegan al correo de iCloud se detectan, descifran y cargan automáticamente cada 30 minutos. Los statements ingresados aparecen con badge email azul en la lista.
featVista de balance mensual Esteam — nueva página que muestra el balance acumulado por mes del presupuesto Esteam de Buddy, accesible desde el dashboard.
fixEl parser de Buddy ahora ignora las categorías de transferencias internas (Aporte Casita, Sobrante de Mes) que no corresponden a gastos reales.
v1.23.1junio 2026
fixAl filtrar por mes, las entradas de tipo Ganancia, traspasos internos (Sale hacia / Llega desde), pagos de tarjeta y notas de crédito que caían fuera del mes estricto por la expansión de ±4 días ya no aparecen en la tabla de conciliación.
fixLos matches cruzados entre meses (ej: cargo bancario 01/05 ↔ Buddy 30/04) ahora aparecen correctamente en la vista del mes donde se registró la entrada Buddy, independientemente de la fecha bancaria.
v1.23.0junio 2026
featDescarga de archivos: cada extracto tiene un botón Bajar que descarga el archivo original con su nombre. En la barra de selección múltiple, el nuevo botón Descargar seleccionados empaqueta todos los archivos elegidos en un ZIP (extractos.zip).
fixAl filtrar por mes, las transacciones Buddy que cayeron fuera del período estricto ya no se muestran en el panel "Solo en Buddy", evitando que inflen artificialmente los no conciliados del mes seleccionado.
v1.22.1junio 2026
fixAl filtrar por mes, las transacciones bancarias del primer y último día ya no quedan sin conciliar por la tolerancia de ±4 días. El rango de Buddy se expande automáticamente en ±4 días en ambos extremos del mes (ej. filtro Enero carga Buddy desde 28 dic hasta 4 feb), manteniendo el rango bancario estrictamente dentro del mes elegido.
v1.22.0junio 2026
featNuevo selector de meses debajo de los tabs de año: filtra la conciliación desde el primer día hasta el último del mes elegido. Solo muestra los meses transcurridos del año actual; en años anteriores muestra los 12. El tab Todos restaura la vista anual completa.
fixCorregido bug que causaba que el toast "Conciliación completada" apareciera múltiples veces al cambiar de año o mes después de haber navegado con el selector de idioma. La causa era la re-registración de listeners de HTMX en cada carga de cuerpo por hx-boost; ahora cada listener se registra una sola vez usando guardas de ventana.
v1.21.3junio 2026
fixCorregido bug en Mercado Pago: dos compras del mismo monto en el mismo comercio el mismo día ya no se colapsan en una sola. Cada transacción ahora usa un ID único derivado del TRANSACTION_ID del CSV, evitando tanto el descarte silencioso como duplicados al re-subir el archivo.
v1.21.2junio 2026
fixAl hacer clic en cualquier celda de la tabla de conciliación, los filtros Fuente y Estado ahora se resetean a "Todos" automáticamente, evitando resultados vacíos cuando había un filtro activo.
fixEl botón × para limpiar la búsqueda ahora aparece correctamente al hacer clic en celdas de fecha, monto o categoría (antes solo aparecía al clicar descripciones).
v1.21.1junio 2026
fixCorregido un bug en el parser de Santander Cuenta Corriente donde transacciones de tipo Traspaso y Egreso aparecían con la descripción truncada (ej. "ternet a T. Crédito" en vez de "Traspaso Internet a T. Crédito"). El offset de descripción ahora se detecta dinámicamente según si la fila incluye número de cuenta o no.
v1.21.0mayo 2026
featNuevo detector de anomalías en la conciliación: marca pares con ⚠ Cat. cuando la descripción bancaria casi siempre matchea con una categoría distinta en Buddy, y con ⚡ Signo cuando el banco y Buddy registran signos opuestos (gasto vs. ingreso). Aparece como filtro en la tabla y como cuadradito clickeable en el resumen.
featTodos los cuadraditos del resumen (Cruzados, Sin registrar, Solo Buddy, Notas de crédito, Sospechosos) ahora son clickeables y navegan directamente a la tabla de conciliación con el filtro correspondiente.
fixEl indicador de cobertura bancaria (SmartBankCutoff) ahora considera todas las fuentes bancarias — no solo las tarjetas Santander — y toma el mínimo del mes más reciente con datos.
fixLa tasa de match ahora incluye los registros Solo Buddy en el denominador, dando un valor más preciso cuando el filtro de cobertura está activo.
v1.20.0mayo 2026
featLos Egreso por Compra de Divisas de Santander CTA ahora se clasifican como pagos de tarjeta de crédito y muestran el badge Santander Intl en la conciliación.
featLa cartola Santander Visa Internacional ahora parsea el ABONO DE DIVISAS y lo vincula automáticamente con el cargo correspondiente en la CTA, usando coincidencia por fecha (la tasa de cambio varía entre cartolas).
fixCorregido patrón de pago TEF desde Scotiabank Cuenta Diaria hacia Santander Visa (era "Sant", ahora es "WM").
v1.19.0mayo 2026
newNueva fuente Santander Línea de Crédito — parsea la cartola PDF CTA CTE CREDITO. Captura los traspasos entre la línea de crédito y la cuenta corriente asociada.
v1.18.0mayo 2026
fixLos MONTO CANCELADO de Amex ahora se enlazan correctamente con los pagos TEF realizados desde la Cuenta Diaria de Scotiabank.
featDetección de traspasos internos entre las tres cuentas Scotiabank (CTA Corriente, Cuenta Diaria y Cuenta Plus). Los movimientos TRANSF entre estas cuentas ya no aparecen como cargos sin registrar.
v1.17.1mayo 2026
newNueva fuente Scotiabank Plus — parsea la cartola PDF de la Cuenta Plus (cuenta de ahorro). Captura las transferencias entre la Cuenta Corriente y esta cuenta, intereses y pagos de servicios.
v1.17.0mayo 2026
newNueva fuente Scotiabank Cuenta Diaria — parsea la cartola PDF de la Cuenta Diaria (cuenta de ahorro/intermediaria). Captura las transferencias de traspaso entre la Cuenta Corriente y el pago de Amex.
v1.16.0mayo 2026
featCobertura i18n completa — todos los tooltips, encabezados de tabla, toasts, errores HTTP y el visor PDF ahora se traducen correctamente al cambiar de idioma
featChangelog bilingüe — el historial de cambios ahora está disponible en español e inglés
v1.15.10mayo 2026
fixBranding corporativo corregido en todas las fuentes — colores de badges, tags, zonas de drop e íconos de tarjeta ahora usan los hex oficiales de cada banco/servicio
fixNuevos íconos SVG para Santander Visa (WorldMember dorado), Santander Amex (azul Amex), Mach (morado MACH BANK), Visa Singular (gris carbón), Tenpo (verde lima) y Banco de Chile Fan (azul royal + FAN cyan)
fixBadges "sin conciliar" (status-bank) ahora muestran el color correcto por fuente en lugar de caer al rojo genérico
v1.15.9mayo 2026
featNueva fuente Tenpo — cartola mensual PDF de Tenpo Payments (tarjeta Mastercard prepago); soporta Compra, Devolución, Carga de saldo e Inversión; los créditos se almacenan como monto negativo para emparejarse correctamente con Buddy
fixTraspasos Scotiabank → Tenpo ahora se detectan como movimientos internos — antes aparecían como dos filas "Solo banco" porque Tenpo no estaba registrado como contraparte válida; ahora el par se muestra como enlace ↔ en la sección de movimientos internos
v1.15.8mayo 2026
fixAl presionar F5, el buscador y el combo de fuente ya se aplican correctamente — antes, si había una columna ordenada, applyFilters() nunca se ejecutaba y las filas aparecían sin filtrar
fixRestauración de sort en F5 — la dirección ascendente se recuperaba como "reset" por un error en el signo de _sortDir; ahora ambas direcciones (asc/desc) se restauran fielmente
fixF5 con un año distinto al actual ya muestra los datos del año correcto — el handler del dashboard ignoraba el parámetro ?year= de la URL y siempre usaba el año en curso
v1.15.7mayo 2026
fixScotiabank lee el nombre del destino en la descripción del TEF (Fan mio, Mach Mio, etc.) para asignar la contraparte correcta — antes un TEF a Fan podía emparejarse erróneamente con SantanderCTA si ambos tenían el mismo monto
fixIngresos de Buddy con signo invertido (ej. Rent income exportado como positivo en lugar de negativo) ahora emparejan con el abono bancario correspondiente
v1.15.5mayo 2026
fixMercado Pago ahora importa los abonos por Transferencia recibida — los ingresos desde Scotiabank o CopecPay hacia MP ya se capturan y emparejan como traspasos internos
fixRestricción de contrapartes en traspasos internos (TransferCounterparts) — CopecPay solo empareja con Scotiabank, SantanderCTA y MP; Fan/Mach solo con Scotiabank y SantanderCTA; evita pares incorrectos cuando coinciden montos entre fuentes que no se transfieren entre sí
fixTraspasos huérfanos (con patrón interno pero sin contraparte cargada, ej. TEF hacia Tenpo) ya no se descartan silenciosamente — quedan visibles en la conciliación
fixVisa Singular — PAGO EN EFECTIVO se reconoce como el abono del período y se vincula con el pago desde Scotiabank, igual que MONTO CANCELADO en Santander
v1.15.1mayo 2026
fixFecha de corte sin cartola ahora considera también los extractos de Santander Amex y Visa Singular — antes solo miraba Santander Visa, lo que podía mostrar un cutoff incorrecto si la cartola más reciente era de otra tarjeta
fixRe-adopción de transacciones deduplicadas al borrar un extracto — cuando dos extractos solapados comparten una transacción, borrar el primero ya no elimina la transacción del segundo
v1.15.0mayo 2026
newReconoce Traspaso Internet a T. Crédito desde Santander CTA como pago de tarjeta de crédito
newInferencia Visa vs Amex para pagos CTA — extrae los pagos recibidos (MONTO CANCELADO fechado) del cuerpo de cada cartola PDF y los vincula con el cargo en cuenta corriente
newInferencia por total oficial del extracto como primer criterio cuando el pago coincide con el monto facturado
fixFiltro sin cartola ahora excluye transacciones de todas las fuentes bancarias a partir del día de corte, no solo Santander Visa
v1.14.0mayo 2026
newBotón Resubir por fila y en bulk — re-procesa archivos ya cargados sin necesidad de buscarlos en el disco; los archivos CSV y de texto ahora también quedan guardados en el servidor al subirse
newVinculación de MONTO CANCELADO — el pago del período anterior en el PDF Visa/Amex se extrae y se vincula automáticamente con el cargo en cuenta corriente (Santander CTA o Scotiabank)
newFilas del resumen Top sin registrar son clicables y navegan directamente a la conciliación filtrando por esa transacción
fixToast de conciliación aparece correctamente después de resubir archivos
v1.13.2mayo 2026
fixLos conteos del filtro Estado ahora se recalculan dinámicamente al aplicar cualquier otro filtro (fuente, titular, búsqueda) — antes mostraban los totales generales del servidor sin importar los filtros activos
v1.13.1mayo 2026
fixPagos TC Scotiabank hacia Santander Visa/Amex ahora se detectan vía glosa TEF (WM, Amex) y muestran el badge de la tarjeta con su color correspondiente
fixTransferencias "Santander Mío" ya no se clasificaban falsamente como Pago TC — el patrón TEF se acotó a WM y Amex
fixBadge de tarjeta en filas Pago TC ahora usa el color de la fuente inferida en vez del morado fijo
v1.13.0mayo 2026
featNueva fuente Visa Singular — estado de cuenta PDF de tarjeta de crédito; captura cargos, servicios mensuales y pagos en efectivo
v1.12.0mayo 2026
featPagos de tarjeta de crédito detectados automáticamente — Scotiabank (PAGO TARJ.CRED.) y Santander CTA (Traspaso Fondo a Tarjeta Crédito) se clasifican como categoría propia y se excluyen de la conciliación normal
featFiltro por estado en tabla de conciliación y ordenamiento por columnas
v1.11.0mayo 2026
featNueva fuente Mach — cartola PDF de la billetera digital; captura compras (egreso) y transferencias recibidas/enviadas; las transferencias entre cuentas propias se excluyen automáticamente de la conciliación
fixTraspasos Scotiabank: el patrón de detección ahora requiere prefijo TEF además del RUT, evitando que PAGO IMPTO TGR y otros pagos con el RUT en la glosa se descartaran como traspasos huérfanos
v1.10.2mayo 2026
fixParser Scotiabank ahora captura abonos (ingresos, reembolsos ISAPRE, transferencias recibidas) — antes se descartaban silenciosamente; se almacenan con monto negativo para coincidir con la convención del dominio
fixParser Edenred ahora captura ABONO EMPLEADOR (carga de saldo del empleador) — antes se omitía en ambos formatos tabular y concatenado; se almacena con monto negativo
v1.10.1mayo 2026
fixLogo del header ahora usa el mismo SVG que el favicon — consistencia visual entre ícono y pestaña del navegador
featTítulo y logo clickeables — navegan a la raíz (/)
v1.10.0mayo 2026
featNueva fuente: Banco de Chile Cuenta Fan — importa cartolas PDF de Cuenta Vista, detecta cargos y abonos con posicionamiento de columnas de ancho fijo
infraParser tests para Scotiabank y Mercado Pago — cubre todos los meses de muestra (skip graceful si los archivos no existen)
fixCSS badges santander_visa, edenred hover, banco_chile_fan — src-tag y stmt-source ya tienen color propio; .file-drop--visa y .file-drop--edenred:hover completos
fixSublabel de Neat migrado a i18n (T(ctx, "upload.sublabel_neat")) — antes estaba hardcodeado en el template
v1.9.0mayo 2026
featureSoporte i18n ES/EN — selector de idioma en el header, persistencia por cookie, detección automática vía Accept-Language
infraBundle go-i18n v2 embebido en el binario (~100 keys por idioma), middleware de locale inyectado en el contexto HTTP
fixBotón de idioma activo no recarga la página al hacer clic
v1.8.2mayo 2026
fixImport de aliases ahora actualiza el Diccionario en pantalla — el botón usaba hx-target="#dict-content" que solo existe en la página standalone, no en el dashboard; corregido a #tab-diccionario
v1.8.1mayo 2026
fixImport de aliases ahora muestra los aliases importados aunque la descripción no tenga transacciones cargadas — antes quedaban guardados en la DB pero invisibles en el Diccionario
infraEvent bus interno para desacoplar efectos secundarios de subida y conciliación
v1.7.8mayo 2026
fixTraspasos entre cuentas propias ya no aparecen en "Top cargos sin registrar" — antes los traspasos sin contraparte cargada (ej. solo Scotiabank sin Santander CTA) quedaban en el pool de no conciliados
featImport / export de aliases — botones en el Diccionario para descargar todos los aliases como JSON y subirlos a otra instancia (ej. local → Fly)
featTítulo del tab muestra "(local)" cuando la app corre en localhost
infraPipeline de release — make release encadena tests → bump de versión → build → commit → deploy a Fly
v1.7.5mayo 2026
fixFiltro "Ganancias / intereses" ahora muestra correctamente las filas — comparaba data-source en vez de data-status
v1.7.4mayo 2026
fixVisor PDF Copec Pay — el click en "Ver en PDF" ahora resalta la línea correcta; el filtro de fecha ahora reconoce el formato DD-MM-YYYY que usa Copec Pay (antes buscaba DD/MM y no encontraba coincidencia)
v1.7.3mayo 2026
featGanancias Copec Pay excluidas de conciliación — "Ganancia Copec Pay" (interés diario de cuenta remunerada) se muestra aparte con el badge ✦ Ganancia, sin contaminar el pool de Buddy
v1.7.2mayo 2026
featTraspasos internos Copec Pay detectados — "Retiro a Esteban Contreras" y "Transferencia de Contreras" se vinculan automáticamente con Scotiabank y Santander CTA
v1.7.1mayo 2026
fixParser Copec Pay reescrito para el formato real "CARTOLA MENSUAL DE MOVIMIENTOS" — fechas DD-MM-YYYY, montos con prefijo $, tabla detectada dinámicamente
v1.7.0mayo 2026
featNueva fuente: Copec Pay — importa cartolas PDF de Cuenta Vista, detecta traspasos internos entre Copec Pay y Santander/Scotiabank
v1.6.0mayo 2026
featSantander Cuenta Corriente ahora se sube como PDF — el parser detecta columnas dinámicamente, maneja caracteres UTF-8 en descripciones y extrae CARGOS/ABONOS con precisión de runa
featBuddy Budget con zonas de subida directa — enero y esteam tienen sus propios botones de carga sin pestañas
v1.5.5mayo 2026
fixMontos siempre se muestran sin signo negativo — el contexto (cargo/abono) ya está implícito en la columna
v1.5.4mayo 2026
fixEtiquetas de traspaso corregidas: la fila con monto negativo muestra "Llega desde" y la positiva "Sale hacia", alineando el significado con cargo y abono respectivamente
v1.5.3mayo 2026
fixTransferencias salientes y otros movimientos negativos ya no se etiquetan incorrectamente como notas de crédito — solo se clasifica así si la descripción lo indica explícitamente
v1.5.1 — v1.5.2mayo 2026
featNuevo parser Santander Cuenta Corriente (XLSX) — carga cartolas y las muestra en el combo de filtros de conciliación
fixEtiquetas de traspaso interno con colores distintivos para distinguirlas del resto
fixEtiqueta HTML residual que aparecía visible en la página al terminar de cargar ciertos archivos
v1.4.0 — v1.5.0mayo 2026
featEstados de cuenta Santander Visa: cargos, comisiones, intereses y abonos del resumen del período ahora se capturan y concilian con Buddy
fixIntereses cargados en el PDF Santander Visa dejaban de incluirse — corregido
featBotón "Ver PDF" en la vista de Archivos — se revela al pasar el cursor y abre el visor en una nueva pestaña
featBadge de versión clickeable — lleva al changelog desde cualquier pantalla
v1.3.0mayo 2026
featDiseño responsive: tablas con scroll horizontal en móvil, zonas táctiles mínimas de 28px
featFiltros con flex-wrap — se adaptan a pantallas angostas
infraDeploy en Fly.io — app disponible en gastos-conciliador.fly.dev
infraDockerfile + soporte UPLOADS_DIR para rutas de archivos en contenedores
v1.1.0abril 2026
featNotas de crédito: detección automática y negación de monto en conciliación
featFiltro "sin cartola" — muestra gastos Buddy sin respaldo bancario
featPersistencia de estado en URL — el año de conciliación sobrevive recargas