Salta al contingut principal

Doneu al vostre agent d'IA un llibre Beancount amb bea

Doneu a un agent d'IA dues tasques de comptabilitat amb bea: importar un CSV bancari amb revisió prèvia i respondre una pregunta de saldo a partir de BQL i la sortida d'informe.

Doneu a un agent d'IA extern dues feines de comptabilitat i manteniu tots els canvis del llibre sota la vostra revisió: importeu un CSV bancari amb una comprovació de vista prèvia, i després responeu una pregunta de saldo a partir de la sortida de consultes i informes.

Instal·leu bea amb l'inici ràpid de CLI. Les ordres locals d'importació, consulta i informes no necessiten cap compte de Beancount.io. El vostre agent de xat només necessita la seva pròpia subscripció o clau d'API. Només l'ajudant integrat bea ask necessita credencials allotjades, i aquestes receptes no l'utilitzen.

Us esteu decidint entre eines? Cinc eines de comptabilitat per a agents d'IA compara Beancount.io, hledger, Xero, QuickBooks Online i Puzzle amb els mateixos criteris de flux de treball d'agents, amb fonts datades.

Què fa l'agent i què fa bea​

L'agent proposa categories i redacta consultes. Bea valida l'estructura del llibre i calcula els totals. Executeu vosaltres mateixos totes les ordres que apareixen a continuació. L'agent mai escriu directament al vostre llibre.

Recepta 1: importar un extracte amb categories proposades per l'agent​

Converteix una exportació bancària en entrades validades. L'agent suggereix les regles de categorització. La revisió de vista prèvia i de duplicats decideix què s'escriu.

Requisits previs​

Necessiteu bea i un directori de demostració nou. No cal cap compte ni cap importador de Python.

Prepareu les entrades​

Creeu el directori i el llibre. Els objectius explícits --file mantenen totes les ordres apuntades als llibres de demostració.

mkdir ai-agent-demo && cd ai-agent-demo
bea --no-input init books --currency USD --date 2026-08-01 --opening-balance "Assets:Checking 1000"
bea --file books/main.bean add open --date 2026-08-01 --account Expenses:Transport:Fuel -c USD

Deseu aquesta mostra com a statement.csv:

Date,Payee,Narration,Amount
2026-08-02,Whole Foods,groceries,-20.00
2026-08-03,Shell,gas,-40.00
2026-08-04,Unknown Shop,mystery,-9.99

Deseu aquestes regles de categorització com a rules.toml:

[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
 
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"

Copieu el missatge de tasca​

Enganxeu aquest missatge al vostre agent extern juntament amb el contingut del CSV:

Propose Beancount categorization rules for my bank CSV rows.
Suggest one TOML rule per merchant with a match pattern and a
destination expense account. Never change dates, payees, or amounts.
Leave rows you cannot categorize confidently unmatched: they post to
Expenses:Uncategorized with flag ! for my review. I run bea import
preview and apply locally. You do not write my ledger.

Executeu els equivalents de CLI​

Primer la vista prèvia, després apliqueu les entrades revisades i verifiqueu el resultat:

bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee,narration=Narration --account Assets:Checking --rules rules.toml
bea --file books/main.bean import statement.csv --apply
bea --file books/main.bean check
bea --file books/main.bean list transaction --flag '!'
bea --file books/main.bean query "SELECT account, sum(position) WHERE account = 'Assets:Checking' GROUP BY account"

Comproveu la sortida esperada​

La vista prèvia informa de 3 llestes, 0 duplicats exactes, 0 duplicats possibles i surt amb codi 0. No escriu res. L'execució d'aplicació informa de S'han escrit 3 entrades. La comprovació no informa de cap error. La cua ! llista la fila no coincident de Botiga Desconeguda a -9.99 USD. La consulta de saldo informa de 930.01 USD al compte corrent. Repetir l'aplicació informa de 0 llestes, 3 duplicats exactes i escriu 0 entrades.

Reviseu i corregiu​

Recategoritzeu deliberadament la fila ! al vostre llibre després de llegir-la. Una comprovació que passa només demostra que el llibre quadra. No diu res sobre si Despeses:Sense categoritzar és el compte correcte. Per a la política de duplicats, la gestió de conflictes i la via avançada de Python, seguiu el tutorial d'importació de CSV bancari.

Recepta 2: respondre una pregunta de saldo sense escriptures​

Responeu una pregunta dels llibres de demostració: quant es va gastar en queviures i combustible a l'agost de 2026. L'agent redacta la consulta. Les ordres només de lectura produeixen la resposta.

Requisits previs​

Necessiteu el llibre de demostració de la recepta 1 o els vostres propis llibres. Totes les ordres següents són només de lectura.

Copieu el missatge de tasca​

Enganxeu aquest missatge al vostre agent extern:

Draft a Beancount query (BQL) that answers: how much did I spend on
groceries and fuel in August 2026. Use my account names exactly as
listed by bea list open. Propose read-only commands only: bea query
or bea report with an explicit --file target. Do not propose ledger
edits to fix a surprising total. A surprising total means the query
or the books need review, not a compensating entry.

Executeu els equivalents de CLI​

Executeu la consulta redactada contra un objectiu de llibre explícit i, després, feu una comprovació creuada amb un informe:

bea --file books/main.bean query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"
bea --file books/main.bean report income-statement --time 2026-08

Els consumidors de màquina afegiu la marca global --json abans de la subordre:

bea --file books/main.bean --json query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"

Els envelopes JSON, els codis de sortida i la col·locació de les marques globals segueixen la referència de CLI. La guia del llenguatge de consulta documenta tota la superfície BQL.

Comproveu la sortida esperada​

La consulta informa de 20.00 USD per a Despeses:Queviures, 40.00 USD per a Despeses:Transport:Combustible i 9.99 USD per a Despeses:Sense categoritzar. Queviures més combustible són 60.00 USD. L'estat de comptes hi està d'acord: 69.99 USD de despeses d'agost amb un benefici net de -69.99 USD. La variant JSON retorna les mateixes files dins data.rows amb metadades de columnes a data.columns.

Reviseu i corregiu​

Una consulta contra un nom de compte incorrecte imprimeix (sense files) a l'error estàndard i encara surt amb codi 0. Compareu el nom amb la sortida de bea list open i torneu a executar la consulta. No corregiu mai un total sorprenent editant el llibre perquè coincideixi amb la resposta. Arregleu la consulta o arregleu els llibres i, després, torneu a executar bea check.

Primer repte: quadrar tres files sintètiques​

Un primer repte portable amb entrades explícites i una resposta derivada de manera independent. Baixeu els tres fitxers següents, executeu la importació i comproveu els dos totals. No cal cap compte ni cap procés de compra.

Obriu els llibres el 2026-09-01 en USD amb 1000 USD al compte corrent. Poseu tres files de setembre: un pagament de client de 2000.00 USD, una factura d'allotjament de 29.00 USD i una visita a una cafeteria de 12.50 USD. El compte corrent acaba a 2958.50 USD, de 1000 + 2000 - 29 - 12.50. El benefici de setembre és 1958.50 USD, de 2000 - 29 - 12.50. Totes dues expectatives provenen d'aquesta aritmètica, no de la sortida d'informes.

Prepareu les entrades​

Creeu el directori i obriu els dos comptes que la plantilla no porta. Despeses:Menjar ja ve de la plantilla de CLI.

mkdir agent-challenge && cd agent-challenge
bea --no-input init books --currency USD --date 2026-09-01 --opening-balance "Assets:Checking 1000"
bea --file books/main.bean add open --date 2026-09-01 --account Income:Consulting -c USD
bea --file books/main.bean add open --date 2026-09-01 --account Expenses:Software -c USD

Aquestes tres ordres produeixen el llibre següent. Baixeu-lo com a main.bean en lloc de teclejar-lo.

option "title" "Personal ledger"
option "operating_currency" "USD"
 
; Add more accounts with bea add open. Amounts on credit accounts are negative.
; bea import books rows it cannot categorize to Expenses:Uncategorized with flag '!'.
2026-09-01 open Assets:Checking USD
2026-09-01 open Assets:Savings USD
2026-09-01 open Assets:Cash USD
2026-09-01 open Liabilities:CreditCard USD
2026-09-01 open Income:Salary USD
2026-09-01 open Income:Interest USD
2026-09-01 open Expenses:Groceries USD
2026-09-01 open Expenses:Dining USD
2026-09-01 open Expenses:Rent USD
2026-09-01 open Expenses:Transport USD
2026-09-01 open Expenses:Utilities USD
2026-09-01 open Expenses:Fees USD
2026-09-01 open Expenses:Uncategorized USD
2026-09-01 open Equity:OpeningBalances USD
 
2026-09-01 * "Opening balances"
  Assets:Checking          1000 USD
  Equity:OpeningBalances  -1000 USD
 
2026-09-01 open Income:Consulting USD
 
2026-09-01 open Expenses:Software USD

Deseu aquest extracte com a statement.csv, o baixeu-lo com a statement.csv:

Date,Payee,Amount
2026-09-02,Client,2000.00
2026-09-03,Hosting,-29.00
2026-09-04,Cafe,-12.50

Deseu aquestes regles com a rules.toml, o baixeu-les com a rules.toml. Cada regla anomena un compte que el llibre inicial obre.

[[rule]]
match = "client"
account = "Income:Consulting"
 
[[rule]]
match = "hosting"
account = "Expenses:Software"
 
[[rule]]
match = "cafe"
account = "Expenses:Dining"

Executeu el repte​

Primer la vista prèvia, després apliqueu i verifiqueu. Els imports, les dates, els noms de camps i els noms de comptes són idèntics a totes les llengües. Només la prosa al seu voltant està traduïda.

bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml
bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml --apply
bea --file books/main.bean check
bea --file books/main.bean query "SELECT account, sum(position) WHERE account = 'Assets:Checking' GROUP BY account"
bea --file books/main.bean report income-statement --time 2026-09

Comproveu la sortida esperada​

La vista prèvia informa de 3 llestes, 0 duplicats exactes, 0 duplicats possibles i surt amb codi 0. L'execució d'aplicació informa de S'han escrit 3 entrades. La comprovació no informa de cap error. La consulta de saldo manté 2958.50 USD al compte corrent. L'estat de comptes mostra 2000.00 USD d'ingressos de Consultoria contra 41.50 USD de despeses, per a un benefici net de 1958.50 USD. Repetir l'aplicació informa de 0 llestes, 3 duplicats exactes i escriu 0 entrades.

Quan una recepta es converteix en una feina repetitiva​

Els missatges anteriors són adequats per a tasques puntuals impulsades a mà. Les feines que repetiu setmanalment s'adapten a les habilitats versionades del repositori de productes. Cada enllaç següent obre el codi font actual de l'habilitat, que porta les seves pròpies instruccions de configuració i activació. Aquest CMS no manté cap còpia d'aquests fitxers.

  • Comenceu un llibre nou des d'un directori buit amb beancount-init. Crea el fitxer del llibre, un executor de Fava i un projecte de Python.
  • Converteix una exportació bancària en entrades categoritzades amb beancount-import. Etapifica cada fila, suggereix categories de l'historial del llibre, salta les files ja importades i escriu només després de la confirmació. La recepta 1 anterior és la forma manual d'aquesta feina.
  • Proveu que un compte coincideix amb el seu extracte amb beancount-reconcile. Fa un diff del llibre contra l'extracte i col·loca una asserció de saldo de final de període després de la confirmació.
  • Responeu una pregunta dels llibres amb beancount-ask. Executa consultes només de lectura i mostra cada consulta al costat de la seva xifra. La recepta 2 anterior és la forma manual d'aquesta feina.
  • Tanqueu un mes amb beancount-close. Reconcilia tots els comptes actius, comprova les entrades recurrents i les marques de revisió, i enregistra el tancament com a commit.

La col·lecció completa viu a l'arbre d'habilitats canònic.

Doneu bea a un agent amb capacitat de shell, o carregueu una habilitat en un client​

Aquests són dos passos separats. Instal·lar bea mai instal·la ni configura habilitats.

Un agent amb capacitat de shell necessita l'ordre al seu PATH. Instal·leu-la amb l'inici ràpid de CLI i, després, l'agent executarà les mateixes ordres bea que mostren les receptes. L'agent proposa, vosaltres reviseu i bea valida.

Una habilitat es carrega al client de l'agent mateix, mitjançant el mecanisme d'habilitats propi del client. El repositori de productes exposa un arbre canònic als dos clients compatibles: Claude Code la llegeix sota .claude/skills i Codex sota .agents/skills, com a directoris enllaçats a la mateixa font. Apunteu la ubicació d'habilitats del client a la carpeta d'habilitats que necessiteu i continueu llegint la seva font actual per a frases de disparament i actualitzacions.

bea ask carrega les seves pròpies habilitats per separat, des d'un SKILL.md al costat del vostre llibre — consulteu Esteneu bea ask amb habilitats.

Preguntes semblants a Ask sense bea ask​

La recepta 2 respon preguntes del llibre amb un agent extern més ordres només de lectura bea query i bea report. Aquesta via és local. No necessita cap compte ni cap instal·lació addicional.

bea ask és un ajudant integrat separat. No és ni la recepta anterior ni l'habilitat beancount-ask. Dirigeix la pregunta a través del servei d'IA allotjat, per la qual cosa necessita l'extra ask i credencials allotjades, tal com es documenta a la referència de CLI. Instal·leu primer la CLI base i, després, afegiu l'extra només quan vulgueu respostes allotjades.

Sortides citades i verificació de CLI​

Totes les ordres anteriors es van executar contra el paquet publicat bea 0.1.0 en un directori nou. Els comptatges, saldos i missatges citats són verificació de CLI.

Un client ha completat el primer repte en una còpia nova de les baixades sense cap regla proporcionada amb antelació. Muse Code 1.1.1 (model muse-spark-1.3-contributor) va derivar la seva pròpia categorització, va previsualitzar 3 llestes sense escriure res, va aplicar 3 entrades i va informar de 2958.50 USD al compte corrent amb 1958.50 USD de benefici de setembre — coincidint amb les expectatives anteriors. La seva única aplicació fallida (un bloqueig de memòria cau en sandbox, recuperat mitjançant XDG_CACHE_HOME) es conserva al registre. Llegiu el missatge complet, la seqüència d'eines i la verificació a la transcripció de l'execució, o reproduïu la via correcta amb el script de demostració i la seva sortida capturada.

Aquesta execució és una verificació de sortida de CLI d'una sola execució, no un benchmark de models. No afirma res sobre altres clients, la precisió comptable en general ni l'ús de producció sense supervisió.

La història completa de la prova — entrades, metodologia, resultats observats, fallades, limitacions i baixades — es publica com a Pot el vostre agent quadrar aquests llibres?.

Exploreu la recerca més àmplia darrere d'aquests fluxos de treball a Bean Labs, el hub de recerca d'automatització comptable de Beancount.io.

Font: https://beancount.io/ca/docs/Solutions/accounting-with-ai-agents