Naar hoofdinhoud springen

Boekhouden met AI-agents

Geef een externe AI-agent twee boekhoudtaken: importeer een bank-CSV met preview-eerst-controle en beantwoord een saldovraag op basis van BQL- en rapportuitvoer.

Geef een externe AI-agent twee boekhoudtaken en houd elke grootboekwijziging onder uw controle: importeer een bank-CSV met een preview-eerst-controle en beantwoord vervolgens een saldovraag op basis van query- en rapportuitvoer.

Installeer bea met de CLI-snelle start. Lokale import-, query- en rapportopdrachten hebben geen Beancount.io-account nodig. Uw chatagent heeft alleen een eigen abonnement of API-sleutel nodig. Alleen de ingebouwde bea ask-helper heeft gehoste referenties nodig, en deze recepten gebruiken die niet.

Wat de agent doet en wat bea doet

De agent stelt categorieën voor en stelt queries op. Bea valideert de grootboekstructuur en berekent de totalen. U voert elke onderstaande opdracht zelf uit. De agent schrijft nooit rechtstreeks in uw grootboek.

Recept 1: een afschrift importeren met door de agent voorgestelde categorieën

Zet een bankexport om in gevalideerde boekingen. De agent stelt de categoriseringsregels voor. Preview- en duplicaatcontrole bepalen wat er wordt geschreven.

Vereisten

U heeft bea en een verse demodirectory nodig. Geen account en geen Python-importer.

Bereid de invoer voor

Maak de directory en het grootboek aan. Expliciete --file-doelen houden elke opdracht gericht op de demoboeken.

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

Bewaar dit voorbeeld als 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

Bewaar deze categoriseringsregels als rules.toml:

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

Kopieer de taakprompt

Plak deze prompt samen met de CSV-inhoud naar uw externe agent:

Stel Beancount-categoriseringsregels voor mijn bank-CSV-rijen voor.
Stel één TOML-regel per handelaar voor met een matchpatroon en een
bestemmingsuitgavenrekening. Wijzig nooit datums, begunstigden of
bedragen. Laat rijen die u niet met vertrouwen kunt categoriseren
zonder match: ze worden geboekt naar Expenses:Uncategorized met vlag
! voor mijn controle. Ik voer bea-importpreview en -toepassing lokaal
uit. U schrijft niet in mijn grootboek.

Voer de CLI-equivalenten uit

Preview eerst, pas vervolgens de gecontroleerde boekingen toe en verifieer het resultaat:

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"

Controleer de verwachte uitvoer

De preview rapporteert 3 klaar, 0 exacte duplicaten, 0 mogelijke duplicaten en eindigt met code 0. Het schrijft niets. De toepassingsrun rapporteert 3 boekingen geschreven. De controle rapporteert geen fouten. De !-wachtrij toont de enige niet-gematchte rij van Unknown Shop op -9.99 USD. De saldoquery rapporteert 930.01 USD op de betaalrekening. Het herhalen van de toepassing rapporteert 0 klaar, 3 exacte duplicaten en schrijft 0 boekingen.

Controle en correctie

Recategoriseer de !-rij bewust in uw grootboek nadat u deze hebt gelezen. Een geslaagde controle bewijst alleen dat het grootboek in evenwicht is. Het zegt niets over of Expenses:Uncategorized de juiste rekening is. Voor duplicaatbeleid, conflictafhandeling en het geavanceerde Python-pad volgt u de bank-CSV-walkthrough.

Recept 2: een saldovraag beantwoorden zonder schrijfbewerkingen

Beantwoord één vraag op basis van de demoboeken: hoeveel is er in augustus 2026 aan boodschappen en brandstof uitgegeven. De agent stelt de query op. Alleen-lezen opdrachten produceren het antwoord.

Vereisten

U heeft het demogrootboek uit recept 1 of uw eigen boeken nodig. Elke onderstaande opdracht is alleen-lezen.

Kopieer de taakprompt

Plak deze prompt naar uw externe agent:

Stel een Beancount-query (BQL) op die beantwoordt: hoeveel heb ik in
augustus 2026 aan boodschappen en brandstof uitgegeven. Gebruik mijn
rekeningnamen exact zoals vermeld door bea list open. Stel alleen
alleen-lezen opdrachten voor: bea query of bea report met een
expliciet --file-doel. Stel geen grootboekbewerkingen voor om een
verrassend totaal te corrigeren. Een verrassend totaal betekent dat
de query of de boeken moeten worden gecontroleerd, niet een
compenserende boeking.

Voer de CLI-equivalenten uit

Voer de opgestelde query uit tegen een expliciet grootboekdoel en controleer vervolgens met een rapport:

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

Machineconsumenten voegen de globale --json-vlag toe vóór het subcommando:

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

JSON-enveloppen, exitcodes en plaatsing van globale vlaggen volgen de CLI-referentie. De querytaalgids documenteert het volledige BQL-oppervlak.

Controleer de verwachte uitvoer

De query rapporteert 20.00 USD voor Expenses:Groceries, 40.00 USD voor Expenses:Transport:Fuel en 9.99 USD voor Expenses:Uncategorized. Boodschappen plus brandstof is 60.00 USD. De winst- en verliesrekening bevestigt: 69.99 USD aan augustusuitgaven met een nettowinst van -69.99 USD. De JSON-variant retourneert dezelfde rijen in data.rows met kolommetadata in data.columns.

Controle en correctie

Een query tegen een verkeerde rekeningnaam print (geen rijen) naar stderr en eindigt nog steeds met code 0. Vergelijk de naam met de uitvoer van bea list open en voer de query opnieuw uit. Corrigeer nooit een verrassend totaal door het grootboek te bewerken zodat het overeenkomt met het antwoord. Herstel de query of herstel de boeken en voer vervolgens bea check opnieuw uit.

Wanneer een recept een herhalende taak wordt

De bovenstaande prompts zijn geschikt voor eenmalige taken die handmatig worden uitgevoerd. Taken die u wekelijks herhaalt, zijn geschikt voor de versiebeheerde vaardigheden in de productrepository. Elke onderstaande link opent de huidige bron van de vaardigheid, die zijn eigen installatie- en triggerinstructies bevat. Dit CMS bewaart geen kopieën van deze bestanden.

  • Start een nieuw grootboek vanuit een lege directory met beancount-init. Het maakt het grootboekbestand, een Fava-runner en een Python-project aan.
  • Zet een bankexport om in gecategoriseerde boekingen met beancount-import. Het stelt elke rij op, suggereert categorieën op basis van grootboekgeschiedenis, slaat al geïmporteerde rijen over en schrijft alleen na bevestiging. Recept 1 hierboven is de handmatige vorm van deze taak.
  • Bewijs dat één rekening overeenkomt met zijn afschrift met beancount-reconcile. Het vergelijkt het grootboek met het afschrift en legt na bevestiging een periode-einde-saldoverklaring vast.
  • Beantwoord een vraag op basis van de boeken met beancount-ask. Het voert alleen-lezen queries uit en toont elke query naast zijn cijfer. Recept 2 hierboven is de handmatige vorm van deze taak.
  • Sluit een maand af met beancount-close. Het reconcileert elke actieve rekening, controleert terugkerende boekingen en controleerflags en legt de afsluiting vast als een commit.

De volledige collectie bevindt zich in de canonieke vaardighedenboom.

Geef een shell-capabele agent bea, of laad een vaardigheid in een client

Dit zijn twee afzonderlijke stappen. Het installeren van bea installeert of configureert nooit vaardigheden.

Een shell-capabele agent heeft het commando op zijn pad nodig. Installeer het met de CLI-snelle start, waarna de agent dezelfde bea-opdrachten uitvoert die de recepten tonen. De agent stelt voor, u controleert en bea valideert.

Een vaardigheid wordt in de agentclient zelf geladen, via het eigen vaardigheidsmechanisme van die client. De productrepository biedt één canonieke structuur aan beide ondersteunde clients: Claude Code leest deze onder .claude/skills en Codex onder .agents/skills, als gekoppelde directories naar dezelfde bron. Wijs de vaardigheidslocatie van de client aan naar de vaardigheidsmap die u nodig heeft en blijf de huidige bron lezen voor triggerzinnen en updates.

Ask-achtige vragen zonder bea ask

Recept 2 beantwoordt grootboekvragen met een externe agent plus alleen-lezen bea query- en bea report-opdrachten. Dat pad is lokaal. Het heeft geen account en geen extra installatie nodig.

bea ask is een aparte ingebouwde helper. Het is noch het bovenstaande recept, noch de beancount-ask-vaardigheid. Het routeert de vraag via de gehoste AI-service, dus het heeft de ask-extra en gehoste referenties nodig, zoals gedocumenteerd in de CLI-referentie. Installeer eerst de basale CLI en voeg de extra alleen toe wanneer u gehoste antwoorden wilt.

Geciteerde uitvoer en CLI-verificatie

Elke bovenstaande opdracht is uitgevoerd tegen het gepubliceerde bea 0.1.0-pakket in een verse directory. Geciteerde aantallen, saldi en berichten zijn CLI-verificatie. De taakprompts zijn niet uitgevoerd tegen enig model. Modelgedrag wordt afzonderlijk geëvalueerd.

Bron: https://beancount.io/nl/docs/Solutions/accounting-with-ai-agents