3 puntos por GN⁺ 2024-09-17 | 1 comentarios | Compartir por WhatsApp
  • Plain Text Accounting (PTA) es una forma de registrar datos contables en archivos de texto plano y procesarlos con herramientas amigables para la línea de comandos, como Ledger, hledger y Beancount; este sitio es un portal que reúne materiales relacionados en un solo lugar.
  • La actividad de la comunidad se reparte entre Matrix/IRC, foros, Reddit, Lemmy, Hacker News, Mastodon, X y Bluesky, por lo que se pueden seguir preguntas, novedades y conversaciones por proyecto a través de varios canales.
  • Los materiales de aprendizaje están organizados en comparativas de apps, documentación oficial, fundamentos de contabilidad, guías introductorias, chuletas, recetarios, FAQ, diapositivas y videos, lo que permite que quienes usan PTA por primera vez avancen paso a paso.
  • El ecosistema de apps se centra en Ledger, Beancount y hledger, ofrece varias implementaciones y una matriz de funciones; las tres herramientas principales están basadas en C++/Python/Haskell respectivamente y tienen registros de lanzamientos de 2025~2026.
  • Se conecta con importación y conversión, plugins para editores, facturación, consulta de precios, reporting, registro de tiempo, UI, flujos de trabajo y librerías, lo que permite integrar datos contables en texto plano en distintos entornos de trabajo.

Concepto de PTA y rol de plaintextaccounting.org

  • Plain Text Accounting es una forma de llevar libros y contabilidad con archivos de texto plano y software eficiente y amigable para la línea de comandos, como Ledger, hledger y Beancount.
  • plaintextaccounting.org funciona como portal hacia herramientas, documentación y prácticas de la comunidad PTA.
  • Es posible recibir actualizaciones del repositorio del sitio; también se ofrecen informes financieros e información para patrocinar.

Comunidad y canales de discusión

  • Las conversaciones en tiempo real continúan en #plaintextaccounting de Matrix, el Matrix space de plaintextaccounting y el canal IRC #plaintextaccounting en Libera Chat.
  • Las discusiones y novedades están distribuidas en varios canales públicos.
  • En Stack Exchange se ofrecen etiquetas ledger-cli y hledger, además de enlaces de búsqueda.
  • También se enlazan listas de correo y chats por proyecto, junto con This Week In Hledger.

Documentación y materiales de aprendizaje

  • Los materiales de comparación de apps incluyen la lista de apps PTA, una matriz de funciones, el FAQ “qué app PTA elegir” y Syntax Quick Reference.
  • Se enlaza la documentación oficial de apps como Ledger, hledger, Beancount, rustledger, Ledger(Go), Tackler y pta.
  • Los materiales de fundamentos de contabilidad incluyen PTA FAQ, Accounting basics/links de hledger, Double-Entry Counting Method de Beancount y “Accounting for Computer Scientists”, entre otros.
  • Los materiales introductorios se dividen según el punto de partida.
  • Las chuletas, recetarios, FAQ, diapositivas y videos también están organizados en secciones separadas; en la sección de videos hay una nota que indica que es difícil encontrar videos de PTA en YouTube.

Principales apps PTA y comparación de funciones

  • Al empezar con PTA, se puede probar una o más de las apps listadas en el sitio y, en general, es posible la migración de datos entre apps.
  • La lista actual de apps principales reúne varios proyectos.
    • Ledger: C++, iniciado en 2003, último lanzamiento en 2025, alrededor de 245 committers, unas 5.9k stars
    • Beancount: Python, iniciado en 2008, último lanzamiento en 2026, alrededor de 103 committers, unas 5.5k stars
    • hledger: Haskell, iniciado en 2007, último lanzamiento en 2026, alrededor de 194 committers, unas 4.4k stars
    • Transity, Ledger(Go), Abandon, zhang, Tackler, rustledger, knut, acc y ledg también forman parte de la lista actual.
  • Los proyectos antiguos o inactivos se organizan aparte, como placc, budget-cli, mynt, awk-pta, pta, blossom, .Net Ledger, monescript, Penny, UMM y cl-ledger.
  • La matriz de funciones de Ledger, hledger y Beancount se actualizó con referencia a 2024-09 y compara interfaz de usuario, instalación, ayuda, formatos de entrada/salida, comandos, configuración, extensibilidad, nombres de cuentas, presupuestos, gráficos, consulta de precios, queries y validación, entre otros aspectos.
  • Las diferencias representativas se enfocan en elementos que impactan directamente al elegir una herramienta.
    • La CLI enlaza ledger para Ledger, hledger para hledger y beanquery para Beancount.
    • La instalación y configuración sencillas aparecen marcadas como yes para Ledger/hledger y no para Beancount.
    • hledger ofrece formatos de salida text/html/csv/tsv/fods/beancount/sql/json.
    • La validación de Beancount aparece como siempre estricta, mientras que en Ledger y hledger aparece como configurable.

Ecosistema de software

  • La sección AI incluye accountant24, un agente de IA multimodelo y local-first que usa hledger, y un artículo de configuración que usa Claude Code como capa de agente con hledger y un vault de Obsidian.
  • Como distribuciones y configuraciones alternativas se organizan Full-fledged hledger, hledger-flow, Lazy Beancount, hledger-youtube-business, rtrLEDGER y docker-finance.
  • La conversión e importación de datos ocupa una parte importante: además de la conversión CSV integrada de Ledger y hledger, se listan la herramienta de importación de Beancount v2, banks2ledger, beancount-import, beancount2ledger, hledger2beancount, ledger2beancount, plaid2text, entre otras.
    • Las herramientas para migrar desde GnuCash, Intuit/QuickBooks/QIF, KMyMoney y YNAB hacia *ledger o Beancount también están organizadas en subsecciones aparte.
  • Las herramientas de generación de datos se usan para crear transacciones de precios, depreciación, intereses, transacciones recurrentes y postings de ganancias/pérdidas de capital.
  • Los plugins para editores se dividen para Emacs, JetBrains IDE, Nano, Sublime, TextMate, Vim y VS Code.
    • Ejemplos: ledger-mode, beancount-mode, hledger-mode, vim-ledger, vim-beancount, hledger-vscode, vscode-beancount
  • Como herramientas de formateo se listan beancount-black, beancount-black web app y hledger-fmt.
  • Como herramienta de facturación se presenta kairos, una herramienta en Go que genera facturas desde archivos timedot de hledger.

UI, reporting, flujos de trabajo y librerías

  • Las herramientas de consulta de precios incluyen bean-price de Beancount, hledger-stockquotes, ledger-get-prices, pricehist y herramientas basadas en Yahoo Finance para consultar precios de acciones y tipos de cambio.
  • Las herramientas de reporting se extienden a presupuestos, análisis de activos, reportes de diferencias, tasa interna de retorno, gráficos, Sankey, salida PDF y cálculo de ganancias de capital.
  • Las herramientas de registro de tiempo incluyen org, hook de Taskwarrior, Toggl CSV, conversión de timeclock y ejemplos de registro de tiempo basados en hledger.
  • Las UI de terminal, como hledger add, hledger-ui, hledger-iadd, bean-add, ledger xact, puffin y regdel, permiten ingresar, consultar y editar transacciones.
  • También se enlazan herramientas separadas para GUI, web y UI móviles.
    • Web: fava, hledger-web, Paisa, BeanHub
    • Móvil: Beancount Mobile CE, beancount-mobile, NanoLedger, cashier, cone, MoLe
    • GUI: fruit-credits, Ledgera, Prudent, Surebeans, entre otras
  • La sección de flujos de trabajo aborda configuraciones para generar journals de hledger desde CSV o para rastrear y reportar finanzas tradicionales y de criptomonedas con Docker.
  • La sección de librerías reúne componentes de desarrollo para parsear, consultar, reportar e integrar archivos PTA, como parsers de Beancount, BeanHub API, hledger-lib, hledger-web JSON API, node-hledger y pyhledger.

1 comentarios

 
GN⁺ 2024-09-17
Opiniones en Hacker News
  • Los sistemas que exigen una clasificación estricta inmediata no les sirven a algunas personas. En una empresa donde trabajaba antes usábamos un enfoque de dos pasos: primero anotábamos algo corto en iPhone Notes, como -50 Alice tools o +20 Bob returned loan, y después un script parseaba fecha, palabras clave, contraparte y categorías internas de análisis para convertirlo en una plantilla de contabilidad de doble partida.
    Los elementos que el script no lograba identificar se clasificaban manualmente y, si hacía falta, se agregaban a la lista de reglas; además, teníamos listas de equivalencias por persona para que Alice y Bob no tuvieran que usar el mismo vocabulario.
    Es difícil imaginar que alguien que está en una fila, manejando o conversando cada vez que entra o sale dinero vaya a completar siempre un formato como Cat1:cat2:cat3. Al final, lo más probable es que vuelva a notas breves o chats, o que intente completarlo “de memoria” no al final del día, sino quizá el fin de semana.

    • Ese método también suena, al final, a contabilidad en texto plano. Yo uso algo casi igual: no escribo directamente en el archivo del libro mayor, sino que cargo los datos en KMyMoney y luego los convierto con un script a un archivo ledger.
      Con herramientas basadas en texto puedes armar libremente el flujo que quieras, por ejemplo conectando un script que tome notas de iPhone y las convierta al formato ledger, así que me resulta un poco raro verlo como una queja.
    • Nosotros tampoco escribimos directamente el archivo ledger; en vez de convertir notas de formato libre, anotamos la cuenta que debe aplicarse en el campo de notas de la app bancaria y de la app de reportes de gastos de Zoho.
      Cada trimestre descargamos CSV de la cuenta bancaria, la tarjeta de crédito y Zoho, y un script en Ruby mira el campo de notas y lo convierte a un archivo ledger. Hay que ajustar un poco el script y el resultado, pero más del 95% queda automatizado.
      Como extra, también agregamos al archivo ledger validaciones de consistencia, como comprobar que coincida con el saldo recibido del banco y que las partidas estén dentro del período actual.
  • Uso ledger-cli desde hace casi 20 años, desde el momento en que empecé a trabajar por cuenta propia, y aunque no es perfecto, estoy muy satisfecho. Como todo es texto plano, puedo procesarlo con scripts, leerlo en VIM y extraer datos fácilmente.
    El archivo ledger de una de las empresas que actualmente opero es un texto plano de 2 MB con transacciones desde 2016. No le encontré gran valor a desglosar cuentas/categorías con muchísimo detalle, pero para el seguimiento general fue una herramienta indispensable.
    Aprender la contabilidad de doble partida que usan herramientas como ledger también fue interesante; mirando atrás, no fue difícil y se siente como una habilidad útil para toda la vida.

    • Todavía no uso herramientas de este tipo, pero QuickBooks y el banco omitieron algunas transacciones y estoy ordenando todo, así que este artículo me apareció justo en el momento adecuado.
      Como estrategia de cuentas/categorías uso una que coincide con las categorías de gastos que la Agencia Tributaria de Canadá exige en la declaración de impuestos. Al principio creé categorías lógicas, como costos de hosting o costos de prototipos/fabricación, pero después de varios años de remapearlas a las categorías de la CRA, me di cuenta de que alinearlas desde el inicio con las categorías fiscales simplifica muchísimo la declaración de fin de año.
    • Cuando vendí mi casa, la compañía de escrow envió un cheque de reembolso de unos 3.000 dólares por la liquidación del cierre, pero nunca recibí ese cheque. Recién me enteré 5 años después, cuando empecé a usar ledger-cli.
    • Un voto para ledger. Es lo mejor que he usado hasta ahora, y que sea scriptable es enorme. Desde que empecé a usarlo, llevo más de 2 años haciendo los impuestos correctamente.
    • Pensándolo mejor, lo que más lamento es una limitación general del texto plano: la ausencia de archivos adjuntos. Creé un sistema personal para referenciar archivos específicos, e incluso una app para Mac que, al soltar un archivo sobre una transacción, lo copiaba a una carpeta designada y le agregaba una etiqueta a la transacción.
      Si los datos estuvieran en SQLite habría sido mucho más fácil de implementar, pero entonces se perdería la ventaja de poder editarlos directamente con un editor de texto.
  • Gracias a los LLM, se volvió mucho más fácil mantener la contabilidad en texto plano de forma constante. En especial, ayudan a evitar la carga manual al importar estados de cuenta bancarios a hledger.
    Uso un archivo JSON que mapea transacciones bancarias a cuentas de hledger, y si aparece una transacción sin mapeo nuevo, un script en Python genera un prompt para Claude. Claude mira la lista de cuentas, propone el mapeo para la nueva transacción y, con base en eso, devuelve el asiento de hledger.
    Luego otro script imprime de forma prolija los asientos de hledger de las transacciones bancarias de ese mes, y solo tengo que ajustar unos minutos para dejarlos definitivos. Las instrucciones de mapeo que antes habrían terminado como un montón frágil de expresiones regulares y condicionales ahora pueden escribirse en lenguaje natural.

    • ¿Consideras que un LLM no es frágil? Y enviar información bancaria a Anthropic también es bastante audaz.
  • Disfruté el proceso de aprender usando Beancount, escribir herramientas de importación de datos y manejar la contabilidad directamente. Pero ya pasó casi 1 año desde la última vez que importé datos; intentaba hacerlo todos los meses, pero aunque está bastante automatizado, tarda entre 30 y 60 minutos y se vuelve engorroso.

    • Ojalá los bancos no obstaculizaran tan activamente la exportación de datos. Antes hice un script que aplicaba ingeniería inversa al proceso de inicio de sesión con OCR y limpiaba las partidas incorrectas, pero el costo de mantenimiento era demasiado alto.
      Cuando además empezó a hacer falta verificación móvil, simplemente me rendí.
    • Tuve exactamente la misma experiencia con GnuCash. Cuando lo hacía semanalmente estaba bien; atrasarse de 1 a 3 semanas todavía era tolerable, pero si pasa más tiempo, la carga para ponerse al día crece como una bola de nieve.
      Yo también llevo alrededor de 1 año sin importar datos, y si quiero retomarlo, lo único que se me ocurre es dividirlo en partes pequeñas, subiendo un mes por vez a lo largo de varios días.
    • Si puedes tolerar cierta incomodidad, vale la pena mirar Plaid. Tenía un nivel de prueba suficiente para uso personal y permitía hasta 100 cuentas conectadas.
      https://plaid.com/
    • Con teller.io, la configuración suele ser mucho más sencilla que con Plaid. Lo uso para sincronizar estados de cuenta bancarios y de tarjetas de crédito de Chase con Google Sheets.
  • Uso ledger para la contabilidad y teneduría de libros personal y de varias LLC. Si estás cómodo con la terminal, manejas bien la CLI, sueles usar vim o emacs, tienes bases de sed/awk y haces scripting en bash/python/perl/ruby con frecuencia, es muy probable que aprender ledger y la contabilidad por partida doble te deje mucho más satisfecho que tu método actual.
    reckon es útil para importar transacciones rápidamente: https://github.com/cantino/reckon
    También está bien dividir el problema con include. bal --dc puede resultarle algo familiar a un contador estadounidense, pero muchas veces no entienden bien la forma en que ledger usa números negativos, así que me resultó más fácil escribir algunos scripts para convertirlo al estilo DR/CR. Me sorprendió lo mal que manejaban las abstracciones los contadores con los que traté.

    • Estoy de acuerdo con los dos primeros consejos. El tercero también suena bien, aunque nunca lo necesité.
      Si agregara un solo consejo, sería juntar todo con un Makefile o algo parecido. Cuando hay muchos archivos de transacciones separados por cuenta, los comandos para incluir los archivos correctos pueden volverse largos fácilmente.
      Tampoco recuerdo siempre la sintaxis exacta de los distintos scripts de gráficos y resúmenes, pero con make puedo llamarlos como make cashflow, make balance 'A=Checking', make balance-plot 'A=retirement'.
  • Escribí varios artículos con recetas prácticas para usar Ledger de forma efectiva en situaciones más complejas que las del tutorial básico: https://felixcrux.com/blog/ledger-practices

    • Como alguien que usa mucho ledger, esas recetas son excelentes. Uso un patrón en el que hago seguimiento detallado de clientes y proveedores, y tengo que asignar pagos y cobros a proyectos específicos y a categorías dentro de esos proyectos.
      Al importar transacciones bancarias, primero las asigno a una cuenta con el nombre de la contraparte, y un script usa ledger print para generar un segundo archivo de diario por contraparte, invirtiendo la transacción original y colocándola temporalmente bajo subcuentas de proyecto Unknown y categoría Unknown.
      Después, la persona encargada de los libros asocia la transacción con una factura específica y la asigna a una cuenta Project:Category; si hace falta, divide un solo pago entre varios proyectos/categorías. Al incluir todos los diarios de transacciones bancarias y los diarios por contraparte, se puede usar ledger bal para verificar si la contabilización quedó terminada.
  • La contabilidad en texto plano es genial, pero creo que para mucha gente la mayor barrera es descargar los datos bancarios en un formato estándar.
    Los bancos no van a apoyar activamente mucho más que CSV o Excel, y las plataformas de agregación de datos como Yodlee o Plaid no son amigables con el open source ni con usuarios aficionados.
    Antes hubo una empresa llamada Wesabe (https://en.wikipedia.org/wiki/Wesabe) que hacía software para sincronización bancaria desde el escritorio. Mint.com prácticamente la desplazó, pero todavía recuerdo ese enfoque y parece viable también en open source.

    • hledger tiene una herramienta para convertir CSV bastante arbitrarios en transacciones: https://hledger.org/1.40/hledger.html#csv
      Todavía no la probé, pero después de pasar 4 horas durante varios días ayudando con los problemas de conexión bancaria de una empresa SaaS de contabilidad, estaría dispuesto a dedicarle tiempo.
      Cada vez que concilio transacciones termino peleando con un sistema cuyo interior no puedo ver ni corregir directamente. Ya empecé a dudar si vale la pena el esfuerzo invertido, y si hay herramientas decentes, prefiero manejar los CSV por mi cuenta. Por cierto, esa empresa ni siquiera me dio reembolso porque dijo que era “algo normal”.
    • Hace poco descubrí Paisa, que básicamente es una buena UI montada sobre ledger-cli. La importación es muy cómoda: subes un archivo como un CSV, ves una vista previa y luego escribes un script que convierte cada fila al formato de texto de ledger.
      También tiene linting, y si te gusta el resultado puedes guardar el script para volver a importar cuando quieras. Para rastrear cosas como acciones, también soporta la descarga de precios de commodities.
      Los gráficos no son lo bastante genéricos para mi gusto, así que exporto los datos a otro lado, pero como herramienta de entrada de datos es excelente.
    • Me pasó que los estados de cuenta en PDF que el banco está obligado legalmente a entregar no coinciden con el CSV. Además, los CSV casi no incluyen datos de saldo.
      Por eso descargo los PDF y extraigo los datos, pero es innecesariamente doloroso. Para ofrecer un PDF fácil de leer por máquinas, bastaría con seguir algunas reglas simples que permitan extraer 3 o 4 campos de transacción y algunos campos del estado de cuenta, como fecha y saldo, sin heurísticas frágiles.
      Un PDF con marca y legible para humanos no está reñido con un PDF legible por máquinas.
    • En el Reino Unido existe Open Banking, una API estándar para acceder a datos bancarios: https://www.openbanking.org.uk/
    • En mi país, todas las transacciones llegan por SMS, así que hice un sistema con Tasker que captura los SMS y los guarda en un archivo CSV. Ese CSV lo puse en una carpeta que se sincroniza al escritorio con SyncThing.
      Tenía planeado procesar esos datos e ingresarlos al sistema contable, pero nunca lo llevé a cabo; después se me dañó el teléfono y también perdí la acción de Tasker. Ya no me quedan ganas de implementarlo de nuevo.
  • El dominio relacionado sigue existiendo. Artículo de 2023: https://news.ycombinator.com/item?id=36022005, artículo de 2021: https://news.ycombinator.com/item?id=28420797, artículo de 2016: https://news.ycombinator.com/item?id=11164330
    Se pueden ver más menciones del concepto en https://hn.algolia.com/?q=Plain+Text+Accounting

  • Me da curiosidad cómo usan realmente otras personas las herramientas de contabilidad en texto plano. Quisiera saber si las usan para entender sus hábitos de gasto y cambiar conductas, para dar seguimiento a costos, ingresos y patrimonio neto, o si lo atractivo es el proceso ordenado en sí.
    Cada vez que veo este tema, siento a la vez el impulso de meterme de lleno y la culpa por no haber sido constante en intentos anteriores. Ahora llevo mes y medio sin actualizar mi libro mayor personal, así que pesa más la culpa.
    Al final, como no tengo claro por qué lo uso, con el tiempo termina sintiéndose como registrar transacciones solo por registrarlas.

    • Yo lo uso siempre para dividir gastos en grupo de forma improvisada. En situaciones como un viaje de tres personas, es mucho más fácil repartir los gastos ese día o más adelante en la semana, y dejar que las deudas se acumulen para saldarlas cuando haga falta. Este tipo de gastos caóticos es muy difícil de rastrear de otra manera.
      Con los gastos de trabajo es parecido. Pago equipos o servicios con mi tarjeta y luego los reporto para que me los reembolsen en efectivo o por transferencia. Aunque esto no funciona en algunos países o empresas.
      Para los gastos personales cotidianos, el banco y la experiencia ya me dan suficiente información, así que no necesito llevar contabilidad. Tiene que haber una motivación económica, no emocional. Si sé que, si abandono la contabilidad, un amigo terminará gastando cientos de dólares de más en tragos o la empresa se quedará gratis con un cable HDMI, ingreso el monto sin dudar. La razón por la que la contabilidad personal no me funciona bien es que lo que pierdo no es dinero, sino análisis.
    • Como trabajador independiente, uso Beancount para las cuentas del negocio y mi portafolio de acciones. Me gusta su enfoque más estricto, y Fava, la interfaz web, es práctica para reportes y visualizaciones.
      También tengo algunos scripts que automatizan procesos como importar transacciones de Wise o rastrear tipos de cambio. Pero no tengo la disciplina suficiente para usarlo en gastos personales diarios o presupuestos.
    • No lo uso como una herramienta de motivación para cambiar hábitos de gasto, pero me gusta mantener un registro de todas mis cuentas y activos. Me ayuda a entender mejor mi situación financiera completa, y dentro de una cuenta de ahorro líquida creo cuentas virtuales para separar saldos por rubros que voy amortizando, como mantenimiento del auto o seguros.
    • Uso hledger para varias cosas. Registro cuentas por cobrar de clientes, clasificación de gastos como comida, restaurantes, libros y suscripciones a revistas, saldos actuales de cuentas en varias monedas, dinero prestado a otras personas y regalos, y sobres virtuales de ahorro para viajes, regalos y metas de inversión.
      Me ha ayudado mucho a reducir el hábito de comer fuera al ver cuánto desperdicio a diario en eso y calcular el resultado compuesto si pusiera ese dinero en fondos indexados. También puedo distinguir entre cuentas por cobrar de clientes y flujo de caja real, o flujo de caja según ingresos esperados.
      Dividir mentalmente el saldo de la cuenta de ahorro en cosas como “40% meta de inversión, 1% regalos” redujo las veces que veía un saldo grande y lo gastaba por impulso. También tengo un programa que genera gráficos del aumento de activos y de los aumentos o disminuciones de gastos por categoría, anota si esos cambios tuvieron un efecto neto positivo en mi vida y lo vuelca a una página web; lo uso cada año para decidir el plan siguiente.
      También tengo un script en Python que convierte el archivo ledger a Excel y se lo envío al contador para la declaración anual de impuestos. Mantengo aparte el archivo ledger del negocio; no lo gestiono manualmente, sino que exporto los datos desde el software del contador y hago mis propios cálculos en casa.
      En el negocio lo uso para proyecciones de flujo de caja que estiman cómo crecerán los gastos con el aumento de ventas, detección de anomalías en gastos por departamento, decisiones sobre si contratar más personal o aumentar el gasto en marketing, y cálculo de métricas como ROIC.
      La contabilidad por partida doble ayuda a importar estados de cuenta bancarios, generar el ledger y detectar discrepancias contables. Separo cuentas por uso, como gasto discrecional, beneficios para empleados e insumos del negocio, y hago que reciban depósitos semanales desde la cuenta principal para comprobar si hay algo raro.
      Antes, un contador no fue transparente y registró gastos falsos en los libros para que pareciera que me había ahorrado muchos impuestos; terminé en tribunales y pagando una gran multa e intereses por atraso. Ahora no confío en los contadores y siempre verifico todo.
      Tengo muchos scripts de automatización que importan datos de Stripe, estados de cuenta bancarios, libros del contador, etc., y uso Python para conciliarlos entre sí y encontrar discrepancias. Como programador, la contabilidad en texto plano me encaja muy bien, y durante años he construido mi propio sistema sobre hledger.