> One of the hard problems in personal finance is data capture
With hledger and vim, I typically search and copy a previous similar transaction, then search and copy similar items. I have a keybinding to change the date, so like 3\d changes the date of the transaction I copied to 3 days ago. Overall, being proficient in vim, capture takes very few keystrokes.
Since the files are plain text, I can easily e.g. list all products I've ever bought with a `grep | sort | uniq` pipeline, to check stuff like whether I put a product identifier under a wrong account or used different identifiers for the same product.
Also, since the files are plain text, I can track changes with git. That gives me clarity over changes in the sense that I can make a large change (e.g. reorganizing accounts) over historical transactions and review the changes before committing.
Regarding large changes, which I think is also a type of capture, I can easily make them with `sed -i ...`, vim macros, awk, etc.
> and input validation
After I've captured, running hb (which is a personal alias for `hledger balance`) results in hledger raising an error if a transaction is not balanced. I can also add an assertion `= X` to the end of account changes to assert what the account is supposed to hold after the change. The number comes from physically checking the account, whether that's by checking the bank app or opening my wallet and counting. hledger will raise an error when an assertion is wrong.
> Programs like QuickBooks and Xero
Being unfamiliar with QuickBooks and Xero, how would these programs do capture and validation better for me?
This is already after the data capture part. The hard part is to remember every little transaction I had until I have vim at my hand. The only solution seems to be working more or less is to take out my phone and type it as soon as the transaction happened. And I won't try to use vim on phone ever again..
> The hard part is to remember every little transaction I had until I have vim at my hand.
Most of the time, there's no need to remember. Just put the receipt in your pocket, and when you get home you can further postpone it by stacking it with other receipts on a receipt spike. It's only the cash transactions that are best not left postponed for longer than a day or 2, but if you just scribble down the important bits on a scrap of paper, you can postpone it like any other receipt.
This is one of the reasons I use YNAB (for shared household budget) and a Google sheet (for personal budget).
I usually just hold onto the receipt for whatever I do until the end of the working day and get it entered that night. But if a receipt or my pay app isn't an option then I can enter the transaction right there on the phone before I forget.
I use GnuCash. For card transactions I simply import my bank statement .csv file every other week or so. For cash transaction, I use the app on my phone, otherwise I just forget how much I spent and where, by the time I get to my PC.
I never really got past the importing stage in GNUcash. I want to categorize the payments into different accounts, depending on how the money was spent. But there is no easy way of doing it. Or doing it iteratively.
When you import all your new transactions are presented. You can click (or ctrl-click to choose several) and match them to an account of your choosing.
It also memorises what transactions go into what category, so after you categorise, say "PURCHASE LIDL" as Expenses.Groceries, it will automatically match future transactions with the same name to groceries as well.
With hledger and vim, I typically search and copy a previous similar transaction, then search and copy similar items. I have a keybinding to change the date, so like 3\d changes the date of the transaction I copied to 3 days ago. Overall, being proficient in vim, capture takes very few keystrokes.
Since the files are plain text, I can easily e.g. list all products I've ever bought with a `grep | sort | uniq` pipeline, to check stuff like whether I put a product identifier under a wrong account or used different identifiers for the same product.
Also, since the files are plain text, I can track changes with git. That gives me clarity over changes in the sense that I can make a large change (e.g. reorganizing accounts) over historical transactions and review the changes before committing.
Regarding large changes, which I think is also a type of capture, I can easily make them with `sed -i ...`, vim macros, awk, etc.
> and input validation
After I've captured, running hb (which is a personal alias for `hledger balance`) results in hledger raising an error if a transaction is not balanced. I can also add an assertion `= X` to the end of account changes to assert what the account is supposed to hold after the change. The number comes from physically checking the account, whether that's by checking the bank app or opening my wallet and counting. hledger will raise an error when an assertion is wrong.
> Programs like QuickBooks and Xero
Being unfamiliar with QuickBooks and Xero, how would these programs do capture and validation better for me?