Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cantino/reckon
Flexibly import bank account CSV files into Ledger for command-line accounting
https://github.com/cantino/reckon
Last synced: about 9 hours ago
JSON representation
Flexibly import bank account CSV files into Ledger for command-line accounting
- Host: GitHub
- URL: https://github.com/cantino/reckon
- Owner: cantino
- License: mit
- Created: 2013-01-13T07:41:09.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2024-06-05T02:13:52.000Z (5 months ago)
- Last Synced: 2024-11-06T13:14:36.445Z (7 days ago)
- Language: Ruby
- Homepage: http://blog.andrewcantino.com/blog/2013/02/16/command-line-accounting-with-ledger-and-reckon/
- Size: 536 KB
- Stars: 414
- Watchers: 18
- Forks: 46
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Reckon
![Build Status](https://github.com/cantino/reckon/workflows/Build%20Status/badge.svg)
Reckon automagically converts CSV files for use with the command-line accounting tool [Ledger](http://www.ledger-cli.org/). It also helps you to select the correct accounts associated with the CSV data using Bayesian machine learning.
## Installation
Assuming you have Ruby and [Rubygems](http://rubygems.org/pages/download) installed on your system, simply run
gem install --user reckon
## Example Usage
First, login to your bank and export your transaction data as a CSV file.
To see how the CSV parses:
reckon -f bank.csv -p
If your CSV file has a header on the first line, include `--contains-header`.
To convert to ledger format and label everything, do:
reckon -f bank.csv -o output.dat
To have reckon learn from an existing ledger file, provide it with -l:
reckon -f bank.csv -l 2010.dat -o output.dat
Learn more:
> reckon -h
Usage: Reckon.rb [options]
-f, --file FILE The CSV file to parse
-a, --account NAME The Ledger Account this file is for
-v, --[no-]verbose Run verbosely
-i, --inverse Use the negative of each amount
-p, --print-table Print out the parsed CSV in table form
-o, --output-file FILE The ledger file to append to
-l, --learn-from FILE An existing ledger file to learn accounts from
--ignore-columns 1,2,5
Columns to ignore, starts from 1
--money-column 2
Column number of the money column, starts from 1
--money-columns 2,3
Column number of the money columns, starts from 1 (1 or 2 columns)
--raw-money
Don't format money column (for stocks)
--date-column 3
Column number of the date column, starts from 1
--contains-header [N]
Skip N header rows - default 1
--csv-separator ','
CSV separator (default ',')
--comma-separates-cents
Use comma to separate cents ($100,50 vs. $100.50)
--encoding 'UTF-8'
Specify an encoding for the CSV file
-c, --currency '$' Currency symbol to use - default $ (ex £, EUR)
--date-format FORMAT
CSV file date format (see `date` for format)
--ledger-date-format FORMAT
Ledger date format (see `date` for format)
-u, --unattended Don't ask questions and guess all the accounts automatically. Use with --learn-from or --account-tokens options.
-t, --account-tokens FILE YAML file with manually-assigned tokens for each account (see README)
--table-output-file FILE
--default-into-account NAME
Default into account
--default-outof-account NAME
Default 'out of' account
--fail-on-unknown-account
Fail on unmatched transactions.
--suffixed
Append currency symbol as a suffix.
-h, --help Show this message
--version Show versionIf you find CSV files that it can't parse, send me examples or pull requests!
## Unattended mode
You can run reckon in a non-interactive mode.
To guess the accounts reckon can use an existing ledger file or a token file with keywords.`reckon --unattended -a Checking -l 2010.dat -f bank.csv -o ledger.dat`
`reckon --unattended -a Checking --account-tokens tokens.yaml -f bank.csv -o ledger.dat`
In unattended mode, you can use STDIN to read your csv data, by specifying `-` as the argument to `-f`.
`csv_file_generator | reckon --unattended -a Checking -l 2010.dat -o ledger.dat -f -`
### Account Tokens
The account tokens file provides a way to teach reckon about what tokens are associated with an account. As an example, this `tokens.yaml` file:
Expenses:
Bank:
- 'ING Direct Deposit'Would tokenize to 'ING', 'Direct' and 'Deposit'. The matcher would then suggest matches to transactions that included those tokens. (ex 'Chase Direct Deposit')
Here's an example of `tokens.yaml`:
```
Income:
Salary:
- 'LÖN'
- 'Salary'
Expenses:
Bank:
- 'Comission'
- 'MasterCard'
Rent:
- '0011223344' # Landlord bank number
Hosting:
- /hosting/i # This regexp will catch descriptions such as WebHosting or filehosting
'[Internal:Transfer]': # Virtual account
- '4433221100' # Your own account number
```Reckon will use `Income:Unknown` or `Expenses:Unknown` if it can't match a transaction to an account.
You can override these names with the `--default_outof_account` and `--default_into_account` options.
### Substring Match
If, in the above example, you'd prefer to match any transaction that contains the string 'ING Direct Deposit' you have to use a regex:
Expenses:
Bank:
- /ING Direct Deposit/## Contributing
We encourage you to contribute to Reckon! Here is some information to help you.
### Patches/Pull Requests Process
1. Fork the project.
2. Make your feature addition or bug fix.
3. Add tests for it. This is important so I don't break it in a future version unintentionally.
4. Commit, do not mess with rakefile, version, or history.
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
5. Send me a pull request. Bonus points for topic branches.### Integration Tests
Reckon has integration test located in `spec/integration`. These are integration and regression tests for reckon.
Run all the tests:
./spec/integration/test.sh
Run a single test
./spec/integration/test.sh chase/account_tokens_and_regex
#### Add a new integration test
Each test has it's own directory, which you can add any files you want, but the following files are required:
- `test_args` - arguments to add to the reckon command to test against, can specify `--unattended`, `-f input.csv`, etc
- `output.ledger` - the expected ledger file outputIf the result of running reckon with `test_args` does not match `output.ledger`, then the test fails.
Most tests will specify `--unattended`, otherwise reckon prompts for keyboard input.
The convention is to use `input.csv` as the input file, and `tokens.yml` as the tokens file, but it is not required.
## Copyright
Copyright (c) 2013 Andrew Cantino (@cantino). See LICENSE for details.
Thanks to @BlackEdder for many contributions!
Currently maintained by @benprew. Thank you!