A beancount transaction entry assistant
Bean-add is a relatively simple tool designed to ease adding transactions to your beancount journal. While both vi and EMACS have extensions for dealing with ledger and beancount files, some people prefer to edit their text with Nano.
To begin, run
bean-add with your journal file name as the argument. The journal file will be parsed, and you will be presented with a command prompt, not unlike that of
h for a list of available commands.
To add a new transaction, type
n. Enter the transaction's details: date, description, and the participating accounts and their amounts. You can press
tab during entry to trigger completion. If there was a transaction with matching description in the past (and there almost always is), you will be presented with an option to reuse the accounts for the new transaction.
To add a sequence of almost identical transactions, type
nn; You will only be prompted for the date and the amounts. Press
Control-C to end this process.
If, during transaction entry, you enter an amount of zero for any of the accounts, that account will be removed from the transaction, allowing you to correct any mistakes on the fly. For more elaborate corrections, use the
e command. If you plan on using this feature, make sure
$EDITOR is set to your preferred editor. The transaction will be reinserted into an appropriate place in the journal when you finish editing.
Once you are done with the transaction entry, it will be inserted chronologically into your file and you will be returned to the command prompt. Note that this assumes that your beancount file is sorted by date; If it isn't, the results will be unpredictable. Fortunately, this sorting method can be disabled through the options (see below).
Certain special directives, such as
pad can also be entered using
bean-add. The commands for those are usually an uppercase letter.
f to flag the transaction. Type
t to add or remove transaction tags.
You can navigate to another record in the journal file with
s. This is useful if you suddenly remember you forgot some minor detail in a previous transaction. There are also shortcuts available for seeking one record forward and backwards, as well as to the beginning and end of the journal file. To find the record number you want, you can either type
l to search for records that contain a certain string, or
j to examine the transaction's immediate context. You can also type
b to attempt to calculate the final balance of an account on the fly.
To remove a record from the journal file, type
r. To undo a recent removal, type
u. To duplicate the current record at another date (or at the end of the file, if it is undated), type
When you are done entering your transactions, type
w to write the journal file to disk and
q to quit.
c at any point to validate the journal file with
bean-check. If you plan on using this feature, make sure
bean-check is in your
o to view a list of option commands that modify the way bean-add works and their current settings.
Some degree of scripting is possible by piping input into
bean-add. For example, if you know that your bank charges you $1.95 every month for holding a checking account (and most banks do), then you could write a script, replicating your keystrokes, similar to:
#!/bin/sh echo 'n Bank service charge y 1.95 USD wq' | bean-add journal.bnct
And then have
cron or another scheduler execute it every month, on the 1st, thus saving you the effort.
Another use for scripting has been proposed in the comments on the issue regarding split-file beancount journals.
bean-add provides a basic capability to perform credit card statement verification. To begin, type
v, then feed in the name of the account which contains the transactions on the statement (likely, something like
Liabilities:CreditCard), the name of the account from which the statement is paid (likely, something like
Assets:Bank:Checking) and the statement's grand total. Select the records that appear on the statement by typing their numbers. Typing a record number that is already in the statement will remove it. For this to work as expected, be sure to
flag every record that hasn't yet appeared on a statement; Only flagged records are considered for addition. In addition, if the record contains multiple legs that are not paid out at the same time, make sure to also flag each of those legs (the
ff command is helpful here); The flags will be used to track the legs' "paid" status.
To make things easier for you, the
of option exists, which automatically flags new transactions that contain any of the specified accounts.
If, at some point during statement verification, you discover an error in one of the records, you can interrupt the process by pressing
Control-C. When you next press
v, you will be offered to continue from where you left off.
Once the sum of balances of all transactions in the statement matches the statement's target, you will be prompted for the statement's date and description.
bean-add will then unset the flags of all records on the statement to prevent them from being used on another statement and add the statement's own record.
You can use the
-n command line switch to skip right to entering a new transaction with today's date immediately on startup.
This program is free software, released under the Apache License, Version 2.0. See the LICENSE file for more information.
The program's canonical project page resides at https://simonvolpert.com/bean-add/
I gratefully accept appreciation for my work in material form at bitcoincash:qp0q05mx8d7akfwrndsnns9hjf3g4dnpx5ucez59qv.
git clone https://simonvolpert.com/bean-add/
- Cancel seeking if already on the requested record Simon Volpert 9 days ago
- Complain about seeking to the first/last record you are already on Simon Volpert 9 days ago
- Improve consistency of seeking prompts and messages Simon Volpert 10 days ago
- Use "enumerate" where appropriate Simon Volpert 10 days ago
- Seek to the first/last record if seeking to a record outside the journal Simon Volpert 11 days ago
- Insert balance transactions at the beginning of the date Simon Volpert 16 days ago
- Catch specific exceptions during arithmetic expression parsing Simon Volpert 2 months ago
- Format numbers in statement verification status message properly Simon Volpert 2 months ago
- Use float.is_integer() Simon Volpert 2 months ago
- Add the commands to go to the first and last lookup result Simon Volpert 2 months ago