Saltar al contenido
Agents Finance
Caso de usoEvidencia: Experiencia propia

La renta británica desde la contabilidad en texto plano: Jamie Tanna deja a Claude los importadores CSV y saca cada cifra con hledger

Resumen: El ingeniero de software Jamie Tanna preparó su primera declaración Self Assessment del Reino Unido desde diarios de Ledger en texto plano: Claude Sonnet 4.5 escribió, viendo solo las cabeceras, los scripts que pasan a asientos los CSV de Stripe y Hyperwallet, y hledger da las cifras de cada apartado. Experiencia de primera mano con datos de ejemplo ficticios y sin resultados verificables.

Publicada el 12 min de lectura2539 palabras

Diagrama: CSV de Stripe, Stripe Connect y Hyperwallet, importadores que Claude escribe solo con las cabeceras, dos diarios de Ledger, consultas de hledger por año fiscal y la declaración rellenada a mano.
Diagrama propio del flujo que describe Jamie Tanna.Imagen: Agents Finance · Obra propia

Qué hacen y cómo

Un asalariado británico que además cobra ingresos por cuenta propia de su trabajo de código abierto (patrocinios, donaciones y consultoría que le llegan por Stripe, Stripe Connect y Hyperwallet) lleva dos diarios en texto plano con el formato de Ledger: uno para el empleo y los intereses del ahorro y otro para la actividad por cuenta propia. En lugar de programar los importadores a mano, pasó a Claude Sonnet 4.5 solo las cabeceras de los CSV, nunca los datos, y le pidió scripts que convirtieran cada exportación en asientos; repitió hasta que salieron bien. Después consulta los diarios con hledger para el año fiscal británico (del 6 de abril al 5 de abril) y obtiene cada cifra que pide la declaración Self Assessment: salario, retenciones PAYE, retribuciones en especie, préstamo de estudios, intereses y los ingresos y comisiones de la actividad.

Resultado declarado

No hay cifras. El autor dice que el método le ahorró escribir los importadores y le dejó tiempo para leer la documentación de la declaración, y que el formato es tan sencillo que puede compartirlo con un asesor. Lo montó después de tener un primer borrador de la declaración, publicó datos de ejemplo ficticios y tenía previsto probarlo de nuevo con la declaración de 2025-26 y extraer las cifras de los P45, P60 y extractos bancarios con un modelo local (gpt-oss:20b), no con uno remoto.

Ojo con la evidencia. Alguien cuenta cómo lo hace o lo ha hecho, sin cifras contrastables. Es práctica documentada, no una prueba de que funcione en tu caso.

Qué se ha probado de verdad

El 21 de octubre de 2026 leímos el artículo, las páginas del autor sobre sus proyectos de código abierto y su uso de modelos locales, el manual de hledger y la página de plazos de GOV.UK. Con hledger 1.52.4 cargamos los dos diarios de ejemplo del autor (Apache-2.0) y ejecutamos sus comandos: las cifras del empleador y de la actividad coinciden con su artículo, pero su consulta de intereses nos devuelve 0, porque en hledger la fecha final es exclusiva y el asiento de ejemplo es del 5 de abril; terminar el periodo el 6 de abril lo corrige. Probamos con datos inventados nuestro archivo de reglas CSV y nuestro script de informe. Los scripts de importación del autor no están publicados y no hemos presentado ninguna declaración con este método. No es asesoramiento fiscal.

Cómo replicarlo

Instala hledger (o Ledger), crea un diario para el empleo y el ahorro y otro para la actividad por cuenta propia, y decide un plan de cuentas breve antes de importar nada. Exporta en CSV cada fuente de ingresos, pasa a un asistente de IA solo la fila de cabeceras y filas de ejemplo inventadas, y pídele un archivo de reglas CSV de hledger o un importador pequeño; ejecútalo, revisa el resultado con hledger check y compara los totales con los informes de pagos de cada plataforma. Después consulta cada diario para el año fiscal con fecha final el 6 de abril (exclusiva), copia tú las cifras en la declaración de HMRC y guarda los diarios en Git para el año siguiente.

En dos frases

Jamie Tanna, ingeniero de software británico y mantenedor del proyecto de código abierto oapi-codegen, preparó su primera declaración de la renta del Reino Unido (Self Assessment) a partir de dos diarios de Ledger en texto plano: Claude Sonnet 4.5 escribió, viendo solo las cabeceras de los CSV, los scripts que convierten sus exportaciones de Stripe, Stripe Connect y Hyperwallet en asientos, y unos pocos comandos de hledger le dan la cifra de cada apartado. Es un relato breve y honesto de primera mano, con datos de ejemplo ficticios y sin resultados que medir, pero el método se copia en una tarde y el código del artículo tiene licencia Apache-2.0.

Quién lo hace y por qué importa

La situación de Tanna es habitual en quien tiene un sueldo y algún ingreso extra. Su empresa le practica las retenciones (PAYE), pero los patrocinios, las donaciones y la consultoría de su trabajo de código abierto llegan por varias plataformas de pago, cada una con su exportación, sus comisiones y su propia idea de qué es una transacción. En el Reino Unido eso obliga a presentar la declaración Self Assessment del año fiscal, que va del 6 de abril al 5 de abril. Según GOV.UK, el plazo para presentarla por internet del año 2025-26 termina el 31 de enero de 2027, así que la pregunta de cómo reunir las cifras está ahora mismo encima de la mesa para mucha gente.

Él mismo reconoce que no era el candidato ideal para llevar una contabilidad. Había leído el artículo de Siddhant Goel sobre diez años de finanzas personales en texto plano y concluyó que ese nivel de control no era para él. Solo al rellenar la declaración se preguntó si le facilitaría el proceso. Insiste en que no empezó a construir herramientas hasta tener un primer borrador de la declaración, para no perder un tiempo valioso puliendo un sistema que quizá no necesitaba.

La fuente es su propio blog, en un artículo del 1 de febrero de 2026 que declara estar escrito íntegramente por una persona. No vende ningún producto fiscal ni contable ni tiene intereses en Ledger, hledger o Anthropic. Contrastamos el artículo con otras páginas suyas (los proyectos que mantiene y un artículo posterior sobre cómo usa modelos locales) y con el manual de hledger. Se envió a Hacker News y no recibió comentarios, así que no hay debate de la comunidad que valorar.

Herramientas y arquitectura

El diseño tiene tres capas, y solo una usa IA.

Diagrama: exportaciones CSV de tres plataformas de pago, importadores escritos por Claude solo con las cabeceras, dos diarios en Git, consultas de hledger por año fiscal y la declaración rellenada a mano.
La IA escribe el importador una vez; las cifras salen de consultas deterministas · Agents Finance, obra propia

Los libros son texto plano. Eligió el formato de Ledger después de valorar Beancount, que descartó sobre todo porque prefería no mantener importadores en Python. También pensó en una pequeña base de datos SQLite y la desechó por un motivo que conviene recordar: el formato de Ledger es ligero, las herramientas ledger y hledger tienen interfaces de consulta que los modelos de lenguaje ya conocen bien, y un archivo de texto se entrega a un asesor con más facilidad que una base de datos hecha a medida. Al estar en Git, además, cada cambio queda registrado.

Los importadores los escribió una IA. Cada plataforma de pago exporta un CSV. En vez de programar los conversores, dio a Claude Sonnet 4.5 las cabeceras de las columnas, a propósito sin los datos reales, y le pidió scripts que construyeran el diario. Hicieron falta varios intentos para que los asientos quedaran bien. Bromea con que, ya que acabó generando los scripts enteros con IA, podría haber usado Python igualmente.

Las cifras salen de consultas. Con los diarios completos, cada número de la declaración es el resultado de un comando de hledger sobre el periodo del año fiscal: un saldo filtrado por empleador, una cuenta de resultados del diario de la actividad, un saldo de intereses del ahorro y otro de las cuotas del préstamo de estudios. Ningún modelo hace cálculos con las cifras que acaban en la declaración.

También usó GPT-4.1 y Claude Sonnet 4.5 para contrastar el plan de cuentas, y dice que aún no está del todo contento con él.

Los diarios y las consultas

Lleva dos diarios: los ingresos personales (empleo e intereses) y la actividad por cuenta propia del código abierto. Los ejemplos siguientes son del autor, con cifras ficticias, y los reproducimos de su artículo con la licencia Apache 2.0, que el artículo aplica a su código. El texto en prosa del artículo tiene licencia CC BY-NC-SA 4.0 y no lo copiamos.

# personal.journal
# Source: Jamie Tanna, https://www.jvt.me/posts/2026/02/01/ledger/ (Apache-2.0, fictional sample data)
2024-04-04 Deliveroo P60
  income:salary:deliveroo            -£ 76543.21
  expenses:tax:income:PAYE:deliveroo  £ 10203.54
  expenses:loan:student               £  2030.40
  assets:bank:current                 £ 64309.27

2024-04-04 Deliveroo P11D
  income:salary:benefits:private-medical:deliveroo     -£  123.45
  equity:HMRC:taxable-benefits:deliveroo                £  123.45

2024-04-05 Bank-account-1 savings statement
  income:savings-interest  123.45
  income:bank-account-1   -123.45
# self-employment.journal
# Source: Jamie Tanna, https://www.jvt.me/posts/2026/02/01/ledger/ (Apache-2.0, fictional sample data)
; Statement Descriptor: buymeacoffee
2023-06-16 One time support for Jamie Tanna
    assets:bank:sponsorship           4.39 gbp
    income:sponsorship:buymeacoffee  -5.00 gbp
    expenses:fees:stripe              0.61 gbp

; Statement Descriptor: JAMIE TANNA
2023-12-10 Invoice ABC123DE-0001
    assets:bank:consulting:oapi-codegen        184.80 gbp
    income:consulting:oapi-codegen:company-x  -200.00 gbp
    expenses:fees:stripe                        15.20 gbp

; Statement Descriptor: Kofi Donation
2024-03-17 Ko-fi Donation
    assets:bank:sponsorship          11.20 gbp
    income:sponsorship:kofi         -11.54 gbp
    expenses:fees:stripe             0.34 gbp

2024-01-01 Stripe Connect py_abcdef
    assets:bank:sponsorship                 115.11 gbp
    income:sponsorship:github-sponsors     -115.11 gbp
    expenses:fees:stripe                      0.00 gbp

Fíjate en las decisiones de diseño. Cada apunte de un empleador lleva su nombre, así que una sola consulta reúne salario, retenciones y retribuciones en especie; el artículo advierte de que solo funciona si el nombre aparece en todas las líneas relacionadas. Cada patrocinio registra el ingreso bruto, la comisión de la plataforma y el neto que llegó al banco, para poder declarar las comisiones por separado. La retribución en especie del P11D (el seguro médico) se registra contra una cuenta equity:HMRC, porque no hubo movimiento de dinero.

Estas son sus consultas (Apache-2.0), con el periodo del año fiscal 2023-24:

# Employer figures: salary, PAYE and taxable benefits
hledger balance deliveroo --period "2023-04-06 to 2024-04-05" -f personal.journal

# Self-employment: income statement for the tax year
hledger income --period "2023-04-06 to 2024-04-05" -f self-employed.journal

# Savings interest
hledger balance income:savings-interest --period "2023-04-06 to 2024-04-05" -f personal.journal

# Student loan deducted through payroll
hledger balance expenses:loan:student --period "2023-04-06 to 2024-04-05" -f personal.journal

Qué encontramos al ejecutarlas

Cargamos los dos diarios en hledger 1.52.4 (guarda el segundo como self-employed.journal, el nombre que usan sus comandos, no el de su primer comentario). La consulta del empleador devuelve exactamente las cuatro líneas del artículo, y la cuenta de resultados muestra 331,65 £ de ingresos, 16,15 £ de comisiones de Stripe y 315,50 £ netos, como él indica.

La consulta de intereses, en cambio, nos devolvió 0, y no las 123,45 £ que aparecen en el artículo. El manual de hledger lo explica: las fechas finales son exclusivas, y hay que indicar el día siguiente al último que se quiere ver. Con --period "2023-04-06 to 2024-04-05" queda fuera todo lo fechado el 5 de abril, último día del año fiscal británico, y el asiento de intereses de ejemplo es del 5 de abril. La cabecera de la cuenta de resultados lo delata: dice 2023-04-06..2024-04-04. Si el periodo termina el 6 de abril, salen las 123,45 £. Puede que su salida publicada proceda de otros datos o de otra versión; en cualquier caso, termina las consultas del año fiscal británico el 6 de abril. Es justo el tipo de error silencioso que una contabilidad reproducible en texto plano permite detectar.

Paso a paso para replicarlo

  1. Haz antes un borrador de la declaración. Como el autor, averigua qué apartados necesitas de verdad antes de construir nada: empleo, intereses, actividad por cuenta propia, préstamo de estudios.
  2. Instala hledger desde hledger.org (o Ledger desde ledger-cli.org) y crea un repositorio Git con dos diarios, uno para los ingresos personales y otro para la actividad.
  3. Acuerda un plan de cuentas de una docena de cuentas antes de importar nada. Pon el nombre del pagador en cada cuenta que vayas a tener que totalizar por pagador.
  4. Exporta los CSV de cada plataforma para todo el año fiscal, y unos días antes y después para recoger movimientos que se liquidan más tarde.
  5. Pide a la IA el importador, no la contabilidad. Dale la fila de cabeceras y dos o tres filas inventadas, y pídele un archivo de reglas CSV de hledger (sin código que mantener) o un script pequeño. Nunca pegues filas reales, nombres ni números de cuenta.
  6. Ejecútalo y revísalo. hledger check tiene que pasar, y los netos tienen que coincidir con lo que cada plataforma dice que te transfirió. Cuenta con varias vueltas, como le pasó al autor.
  7. Consulta cada cifra del año fiscal con fecha final el 6 de abril y escribe tú los importes en la declaración de HMRC.
  8. Haz commit de todo y guarda el importador para el año siguiente, cuando solo cambiarán las fechas.

Cópialo y adáptalo

El autor no publicó sus scripts de importación, así que todo lo de esta sección, salvo los diarios y comandos anteriores, es una plantilla de Agents Finance basada en el flujo de Jamie Tanna, no su código. Probamos el archivo de reglas y el script con hledger 1.52.4 sobre datos inventados; compruébalos con tus propias exportaciones. El código se deja tal cual, en inglés, para que funcione al copiarlo. Requisitos: hledger 1.30 o posterior, una exportación CSV de cada fuente de ingresos y acceso a un asistente de IA (el autor usó Claude Sonnet 4.5; sirve cualquier modelo capaz).

1. Prompt para el importador (solo cabeceras)

Sustituye las variables entre llaves dobles por tu fila de cabeceras, dos o tres filas inventadas y tu plan de cuentas.

I keep my books in plain-text Ledger format and query them with hledger.
Write an hledger CSV rules file (FILE.csv.rules) that converts this export
into journal entries. I am giving you ONLY the header row and invented rows;
never ask me for real data.

Header row:
{{HEADER_ROW}}

Invented sample rows:
{{TWO_OR_THREE_FAKE_ROWS}}

Rules:
- Account taxonomy to use: {{ACCOUNT_LIST}}
- Each charge: net amount to assets:stripe:balance, gross amount to an
  income account, platform fee to expenses:fees:<platform>.
- Payouts and transfers between my own accounts are not income.
- Anything you cannot classify goes to income:self-employed:UNCATEGORISED.
- Keep the platform's transaction id as the transaction code.
- Do not compute totals or tax; only map columns to postings.
Then tell me which hledger commands to run to check the result.

2. Reglas CSV de hledger para una exportación de saldo de Stripe

Los nombres de columna son un ejemplo de exportación de saldo de Stripe; Stripe deja elegir las columnas, así que edita la línea fields para que coincida con tu fila de cabeceras, en el mismo orden.

# stripe-balance.csv.rules
# Agents Finance template based on Jamie Tanna's taxonomy (jvt.me, 2026-02-01).
# Stripe "Balance" export -> hledger journal. Check the header row of YOUR export
# and edit the `fields` line so the names match the columns, in the same order.
skip 1
fields id, type, source, amount_gross, fee, net, currency_code, created, available_on, description

date-format %Y-%m-%d %H:%M:%S
date %created
description %description
code %id
comment stripe_type:%type, source:%source

currency %currency_code
account1 assets:stripe:balance
amount1 %net

# Default: a charge is self-employed income, with the Stripe fee as an expense
account2 income:self-employed:UNCATEGORISED
amount2 -%amount_gross
account3 expenses:fees:stripe
amount3 %fee

# Payouts move money from the Stripe balance to the bank: no income, no fee
if %type payout
  account2 assets:bank:current
  amount2
  account3
  amount3

# Classify by description (edit to your own sources of income)
if %description Invoice
  account2 income:self-employed:consulting

if %description support|sponsor|donation
  account2 income:self-employed:sponsorship

Revisa el resultado con hledger print -f stripe-balance.csv y, cuando esté bien, añádelo al diario con hledger import stripe-balance.csv -f self-employed.journal, que omite las transacciones ya importadas.

3. Informe del año fiscal

#!/usr/bin/env bash
# tax-year-report.sh — Agents Finance template based on Jamie Tanna's hledger queries.
# Usage: ./tax-year-report.sh 2025   -> tax year 6 April 2025 to 5 April 2026
set -euo pipefail
Y="${1:?start year, e.g. 2025}"
B="$Y-04-06"            # first day of the tax year (inclusive)
E="$((Y + 1))-04-06"    # hledger end dates are EXCLUSIVE: 6 April includes 5 April
P="${PERSONAL:-personal.journal}"
S="${SELF:-self-employed.journal}"

echo "== Tax year $B to $((Y + 1))-04-05 =="
echo "-- Employment (salary, PAYE, benefits)"
hledger balance income:salary expenses:tax:income:PAYE equity:HMRC -b "$B" -e "$E" -f "$P"
echo "-- Savings interest"
hledger balance income:savings-interest -b "$B" -e "$E" -f "$P"
echo "-- Student loan deducted"
hledger balance expenses:loan:student -b "$B" -e "$E" -f "$P"
echo "-- Self-employment: income and expenses (check which expenses are allowable)"
hledger income -b "$B" -e "$E" -f "$S"
echo "-- Checks"
hledger check -f "$P" && hledger check -f "$S" && echo "journals OK"

4. AGENTS.md para el repositorio de la contabilidad

Si dejas que un agente de programación trabaje en el repositorio, ponle los límites por escrito.

# AGENTS.md — personal books (Agents Finance template)

## What this repository is
Plain-text double-entry journals in Ledger format, queried with hledger.
- personal.journal: employment, benefits, savings interest
- self-employed.journal: self-employed income and fees
- rules/*.csv.rules: importers, one per platform

## You may
- Edit or create CSV rules files and test them with `hledger print -f FILE.csv`.
- Run `hledger check` and read-only reports (balance, income, register).
- Propose new accounts in a pull request, with a one-line reason.

## You must not
- Read CSV files in imports/ or any PDF unless I ask you to, for one file.
- Edit existing transactions by hand; fix the rules and re-import instead.
- Compute tax, allowances or what is deductible. Report hledger output only.
- Commit real names, account numbers, NI numbers or UTRs into rules or docs.

## Tax year
UK tax year runs 6 April to 5 April. hledger end dates are exclusive:
always use `-b YYYY-04-06 -e (YYYY+1)-04-06`.

Resultados declarados por la fuente

No hay cifras, y el autor no finge lo contrario. Lo que cuenta es cualitativo: la IA le ahorró escribir los importadores, y eso le dejó tiempo para leer la documentación de la declaración; el formato no necesita una base de datos especial y puede compartirlo con un asesor. Tenía previsto comprobar cómo aguanta con su declaración de 2025-26, ampliar los scripts de importación y probar a extraer las cifras de los P45, P60 y extractos bancarios con gpt-oss:20b, que en sus primeras pruebas se defendió bastante bien con PDF sencillos. A 21 de octubre de 2026 no encontramos un artículo de seguimiento.

Limitaciones y riesgos

  • Una persona, un primer año y datos de ejemplo. Muestra un método que funciona, no uno probado, y nada de esto lo ha revisado HMRC ni un asesor.
  • Los importadores escritos por la IA no están publicados. No podemos juzgar su calidad; nuestras plantillas los sustituyen, no los copian.
  • Los errores de mapeo no avisan. Un pago a tu banco registrado como ingreso, o una devolución que se escapa, dan un total limpio pero falso. Concilia con los informes de pagos de cada plataforma.
  • El plan de cuentas cambia. El propio autor no lo tiene cerrado, y cambiarlo a mitad de año complica las consultas.
  • El criterio fiscal es tuyo. hledger suma las comisiones de Stripe; si esos y otros costes son gastos deducibles, y en qué casilla van, es una cuestión fiscal.
  • Exposición de datos. Solo envió cabeceras a un modelo remoto y dice que solo dejaría a un modelo local ver documentos como los P60. Sigue la misma regla.

Errores comunes

  • Terminar una consulta del año fiscal británico el 5 de abril y perder todo lo fechado ese día.
  • Olvidar el nombre del pagador en algunos apuntes, de modo que el saldo por empleador se deja líneas.
  • Registrar el ingreso neto en lugar del bruto, con lo que las comisiones de la plataforma desaparecen.
  • Contar como ingreso los pagos o traspasos entre tus propias cuentas.
  • Pegar los CSV completos en un chat para «que los clasifique».

Conclusiones

La lección del artículo de Tanna está en las proporciones. La IA hizo el trabajo tedioso y puntual de escribir importadores a partir de una fila de cabeceras; todo lo que acaba en la declaración sale de consultas deterministas sobre archivos de texto que él controla, versiona y puede enseñar a un asesor. Para quien tenga un sueldo y un ingreso extra, ese reparto del trabajo es fácil de copiar, barato de repetir cada año y, como demostró nuestra ejecución de sus propios comandos, lo bastante transparente para detectar un error de un día antes de que lo haga Hacienda británica.

Fuentes

Hemos redactado esta ficha con nuestras palabras a partir de las fuentes anteriores y comprobamos que los enlaces funcionaban el 21 de octubre de 2026. ¿Algún dato es incorrecto? Avísanos.

Newsletter

El boletín semanal de Agents Finance

Una vez por semana, los casos de uso, prompts y tutoriales nuevos de IA en finanzas y ERPs. Sin spam; te das de baja con un clic.

Responsable: Agents Finance. Finalidad: enviarte el boletín semanal. Base: tu consentimiento, que puedes retirar en cualquier momento con el enlace de baja de cada email. Encargado: Mailrelay (WEBLEGAL SL). Derechos: acceso, rectificación, supresión y demás, escribiendo a info@agentsfinance.io.

Entradas relacionadas

Seguir explorando