Beancount DKB Importer
beancount-dkb provides an Importer for converting CSV exports of DKB
(Deutsche Kreditbank) account summaries to the Beancount format.
$ pip install beancount-dkb
In case you prefer installing from the Github repository, please note that
main is the development branch so
stable is what you should be installing
If you're not familiar with how to import external data into Beancount, please read this guide first.
Adjust your config file to include
(depending on what account you're trying to import).
A sample configuration might look like the following:
from beancount_dkb import ECImporter, CreditImporter IBAN_NUMBER = 'DE99 9999 9999 9999 9999 99' # your real IBAN number CARD_NUMBER = '9999 9999 9999 9999' # your real Credit Card number CONFIG = [ ECImporter( IBAN_NUMBER, 'Assets:DKB:EC', currency='EUR', file_encoding='utf-8', ), CreditImporter( CARD_NUMBER, 'Assets:DKB:Credit', currency='EUR', file_encoding='utf-8', ) ]
Once this is in place, you should be able to run
bean-extract on the command
line to extract the transactions and pipe all of them into your Beancount file.
$ bean-extract /path/to/config.py transaction.csv >> you.beancount
Transaction Codes as Meta Tags
By default, the ECImporter prepends the transaction code ("Buchungstext") to the transaction description. To achieve shorter descriptions and use meta tags to query for certain transaction codes, the importer may be configured to store the transaction code in a user provided meta tag.
The following configuration instructs the importer to use a meta tag
store transaction codes:
... CONFIG = [ ECImporter( IBAN_NUMBER, 'Assets:DKB:EC', currency='EUR', meta_code='code', ), ...
This is how an example transaction looks without the option:
2021-03-01 * "Kartenzahlung" "XY Supermarket" Assets:DKB:EC -133.72 EUR
And this is the resulting transaction using
2021-03-01 * "XY Supermarket" code: Kartenzahlung Assets:DKB:EC -133.72 EUR
It's possible to give the importer classes hints if you'd like them to include a second posting based on specific characteristics of the original transaction.
For instance, if the payee or the description in a transaction always matches a
certain value, it's possible to tell the
automatically place a second posting in the returned lits of transactions.
ECImporter accepts a
payee_patterns argument, which should be a list of
(pattern, account) tuples.
CONFIG = [ ECImporter( IBAN_NUMBER, 'Assets:DKB:EC', currency='EUR', file_encoding='utf-8', payee_patterns=[ ('REWE Filialen', 'Expenses:Supermarket:REWE'), ('NETFLIX', 'Expenses:Online:Netflix'), ], ),
CreditImporter accepts a
description_patterns argument, which should be a
(pattern, account) tuples.
CONFIG = [ CreditImporter( CARD_NUMBER, 'Assets:DKB:Credit', currency='EUR', file_encoding='utf-8', description_patterns=[ ('REWE sagt Danke', 'Expenses:Supermarket:REWE'), ('NETFLIX', 'Expenses:Online:Netflix'), ], )
ERROR:root:Importer beancount_dkb.ec.ECImporter.identify() raised an unexpected error: 'utf-8' codec can't decode byte 0xf6 in position 17: invalid start byte
file_encoding parameter. It seems like the CSV
ISO-8859-1 encoded, but
seems like a useful default.
Contributions are most welcome!
Please make sure you have Python 3.6+ and Poetry installed.
- Clone the repository:
git clone https://github.com/siddhantgoel/beancount-dkb
- Install the packages required for development:
- That's basically it. You should now be able to run the test suite:
poetry run py.test.