- Durante 10 años registró sus finanzas personales con Beancount en archivos de texto plano, gestionando alrededor de 45,000 líneas de datos y 10,000 transacciones
- Cada mes dedica entre 30 y 45 minutos a importar archivos CSV de estados bancarios y organizarlos de forma manual y automática, separándolos por año para mantener la legibilidad
- Desarrolló por su cuenta una librería importer basada en Python para bancos alemanes e integrarla con Beancount; algunas siguen en mantenimiento hasta hoy
- Al notar las dificultades de quienes empiezan con Beancount, escribió una guía introductoria para principiantes, que recibió evaluaciones positivas en la comunidad
- Todos los datos se guardan en su dispositivo local y en un repositorio Git, lo que ofrece mayor durabilidad y control que una app o servicio específico
Estructura del libro mayor de Beancount durante 10 años
- Desde 2016 ha gestionado sus datos financieros con Beancount, y en total 45,011 líneas de registros están guardadas en 16 archivos
.beancount
- El archivo
main.beancount sirve como eje central, enlazando los archivos por año mediante include
- El total de transacciones es de unas 9,895, con 19,743 postings (asientos) dentro de ellas
- Existen 1,086 cuentas (accounts) en total, pero no son cuentas bancarias reales, sino cuentas virtuales de clasificación
- Ejemplo: se pueden crear cuentas por categoría detallada como gastos de supermercado, ingresos o servicios por suscripción
- 507 documentos PDF están adjuntos a las transacciones, lo que permite revisar fácilmente los recibos relacionados al hacer la declaración de impuestos
- La cantidad de postings por año aumentó de 715 en 2016 a 2,651 en 2023, quedando 2023 como el año con más actividad
Proceso de gestión mensual
- Cada mes invierte alrededor de 30 a 45 minutos en descargar los estados bancarios como CSV y luego importarlos a Beancount
- Usa CSV porque es más fácil de parsear que PDF
- Un importer basado en Python convierte los datos CSV al formato de Beancount
- Después de agregar las transacciones convertidas al archivo
.beancount, ajusta todo para que el saldo quede en 0 según el principio de partida doble
- Una parte se clasifica automáticamente y otra se ajusta manualmente
- Cuando empieza un nuevo año, mueve las transacciones del año anterior al archivo
<year>.beancount y las gestiona incluyéndolas en main.beancount
- Todo el historial de transacciones está organizado como archivos de texto dentro de un solo directorio
Desarrollo de importers de Beancount para bancos alemanes
- Beancount no conoce por defecto el formato de los estados bancarios, así que necesita convertirlos mediante una clase importer
- Como usa cuentas bancarias alemanas, desarrolló personalmente varios importers
- Las primeras tres librerías siguen activamente mantenidas y en uso
De usuario a autor
- La documentación de Beancount es amplia, pero la barrera de entrada para principiantes es alta
- Con base en lo aprendido tras mucha prueba y error, escribió una guía introductoria
- Publicada en personalfinancespython.com
- Mencionada en la página de external contributions de la documentación oficial de Beancount
- Recibió respuestas positivas en las reseñas de lectores
Cierre
- Todos los datos financieros se guardan como archivos de texto locales con control de versiones en Git
- Los datos existen en su propio dispositivo y no dependen de una app o servicio específico
- Puede analizarlos libremente usando herramientas del ecosistema de Beancount
- Este enfoque de plaintext accounting es una forma sólida de gestión financiera que puede durar más que cualquier app
1 comentarios
Opiniones de Hacker News
Estoy totalmente de acuerdo con el libro del OP. Fue la mejor introducción que he visto hasta ahora para entender Beancount / plaintext accounting
Yo tampoco había entendido bien la contabilidad por partida doble en toda mi vida, hasta que leí "Accounting for Computer Scientists" de Martin Kleppman. La forma en que lo explica con teoría de grafos fue sorprendentemente intuitiva
Antes usaba Quicken, pero cada vez que cambiaba de versión tenía que volver a ingresar los datos, así que al final me pasé a GNU Cash. Pero ahí también tuve problemas de migración
Luego descubrí plaintext accounting (PTA) y elegí hledger (porque me preocupaba que Beancount tuviera problemas de rendimiento). Al aprender partida doble, resultó ser más simple de lo que esperaba.
Parseo con scripts de Python los estados de inversión y recibos de sueldo que llegan en PDF, y también hice clasificación automática para los CSV del banco y la tarjeta, así que tengo casi todo automatizado.
Le dedico como una hora al mes para generar reportes de inversión, presupuesto y resúmenes de impuestos.
Como es plain text, los datos están seguros aunque cambie el formato, y además puedo hacer control de versiones con git.
La desventaja es que no funciona en móvil y requiere algo de conocimiento técnico. Pero si para ti es importante el flujo de tu dinero, esta es la respuesta correcta
Pero la función de sincronización automática de Quicken sigue siendo la mejor, así que es difícil reemplazarla. Reviso 27 cuentas todos los días para detectar fraude o errores, y descargar CSV cada vez para procesarlos manualmente sería una pesadilla.
Además, últimamente los bancos están cerrando OFX y usando a Intuit como hub intermedio, así que cada vez es más difícil escapar
Aprendí la idea de gestionar las finanzas personales como si fueran un sistema de build de proyectos en full-fledged-hledger
Guardas tal cual los datos originales que te dan las instituciones financieras, luego los conviertes a CSV con scripts y después los mapeas a entradas de PTA con archivos de reglas.
Así, si cambias la lógica de conversión o las reglas de clasificación, todo el histórico se actualiza automáticamente.
Puedes empezar con un mes de datos e ir ampliándolo poco a poco — por ejemplo, hasta incluir historial de pedidos de Amazon o recibos de Paypal
Llevo varios años usando Beancount.
Este año empecé a usar, como el OP, una estructura de archivos por año. Antes tenía un solo archivo de 2 millones de líneas y el plugin de Emacs se volvió lento.
La ventaja de este enfoque es que puedes rastrear todo — inversiones, pensión, RSU, cuentas bancarias, etc. Incluso puedes modelar el consumo eléctrico (kWh).
Últimamente he estado creando muchas herramientas de automatización con LLM. Por ejemplo, refactoricé con Claude un motor de reglas de transacciones para convertirlo en una app con UI. Antes eso me habría tomado varios días
Parece que mucha gente está confundiendo plain text con partida doble.
Beancount soporta ambas cosas, pero puedes llevar contabilidad en plain text aunque no sepas partida doble.
Aun así, recomiendo aprender partida doble porque es una gran herramienta para estructurar el conocimiento.
Soy algo escéptico sobre la utilidad del plain text en sí. Parece más bien una reacción contra la dependencia de la nube o el vendor lock-in, pero con usar software libre local para partida doble debería bastar.
Mi conclusión es esta:
Yo uso GnuCash, y aunque no es perfecto, encaja bien con esa filosofía
Empecé con PTA hace poco y la barrera de entrada es bastante alta.
Primero tienes que aprender partida doble y luego elegir entre ledger-cli / hledger / beancount. Las diferencias son sutiles, así que al final pesan más la comunidad y la calidad de la documentación.
Después toca pensar de qué cuentas vas a importar datos, cuánto historial vas a incluir y cómo vas a configurar los importadores automáticos.
hledger usa un DSL y Beancount usa Python. La mayor parte del tiempo se va en edición manual.
Luego empiezan a aparecer nuevas preguntas: presupuesto, impuestos, cómo compartirlo con tu pareja, etc.
Pero siento que el verdadero valor de PTA está justamente en empezar a notar esas preguntas por ti mismo.
Cada año tienes que tomar muchas decisiones financieras — pensión, seguros, internet, una nueva oferta de trabajo — y ayuda muchísimo entender tu economía con ese nivel de detalle
Llevo 10 años usando ledger-cli con Emacs, y antes también usé GnuCash.
Incluso tengo un manual de partida doble que escribí como introducción
Uso PTA desde 2018 y he aprendido mucho a prueba y error.
Los servicios comerciales solo muestran algunas cuentas, pero con PTA puedes entender completamente el flujo de todas tus finanzas.
Por ejemplo, puedes rastrear la procedencia de todo el proceso, desde que recibes acciones de la empresa hasta que se venden y el dinero llega a tu cuenta bancaria
Para mí, una hoja de cálculo de Excel es la herramienta perfecta. Solo agrego los números que necesito cada semana
La literatura es contradictoria y enredada, y hasta los propios contadores a veces la entienden mal a nivel conceptual
Llevo 20 años gestionando mis finanzas con hojas de cálculo de forma simple.
Las actualizo unos 5 minutos al mes y solo rastreo los elementos clave: electricidad, calefacción, seguros, ahorros, etc.
El objetivo es entender la tendencia del gasto y asegurar un presupuesto anual. El dinero que sobra simplemente me lo gasto
Solo registro aparte los gastos de más de $100 para seguir las compras grandes
Descargo cada mes los CSV del banco y la tarjeta y los analizo con scripts de Python.
Con código escrito por un LLM analizo tendencias de gasto por comercio, y en una tarjeta dejo solo cargos recurrentes para detectar variaciones fácilmente
Recomiendo Fava, un frontend GUI para Beancount
https://beancount.github.io/fava/
Es muy útil para visualizar todas las cuentas, y tiene una interfaz de búsqueda/consulta y edición en tiempo real
Este sistema se ve realmente genial, pero me pregunto cómo funciona cuando gestionas las finanzas con una pareja no técnica.
Nosotros usamos YNAB porque la UI es limpia y colaborar es fácil. ¿Se puede implementar una interfaz así en Beancount?
Yo también me clavé con PTA hace tiempo y empecé a llevar registros, pero descargar manualmente las transacciones de varios bancos es demasiado engorroso
Dicen que la automatización es la solución, pero me gustaría saber cómo lo hacen en la práctica — si usan APIs como Plaid o si hacen web scrapers o parsers de PDF
Al final pago $130 al año por YNAB. Mi pareja está contenta y todo se conecta automáticamente.
Tal vez se podrían respaldar los datos por la API de YNAB y usar PTA en paralelo
La industria financiera está demasiado atrasada en esto. La automatización va aumentando, pero todavía el retorno por esfuerzo es bajo
Antes usaba YNAB, pero los problemas de transacciones duplicadas eran muy frecuentes y al final lo dejé.
Lo reinicié tres veces, pero los errores seguían, así que volví al seguimiento manual.
Ahora PTA es mucho más estable y siento que yo tengo el control