Files
Beancount-importer/postbank_csv_importer.py

63 lines
2.1 KiB
Python
Raw Normal View History

2025-08-01 08:09:25 +00:00
from beancount.ingest import importer
from beancount.core import data
from beancount.core.number import D
import csv
class MyCSVImporter(importer.ImporterProtocol):
"""A Beancount importer for CSV files"""
def identify(self, file):
return file.name.endswith('.csv')
def file_account(self, file):
return "Assets:Bank:POSTBANK"
def file_date(self, file):
"""Returns the unique date of the file, if any."""
# Optioneel: als je bestandsnaam een datum bevat
return None
def file_name(self, file):
"""Returns the unique name of the file, if any."""
# Optioneel: als je een unieke naam wilt baseren op het bestand
return None
def extract(self, file, existing_entries=None):
2025-08-01 08:58:00 +00:00
"""Extracts entries from a files."""
2025-08-01 08:09:25 +00:00
entries = []
2025-08-01 08:58:00 +00:00
with open(file.contents, encoding='utf-8')
as f:
reader = csv.reader(f, delimiter=',')
next(reader, None)
for index, row in enumerate(reader):
if not row or not row[0]:
continue
datum_str = row[0]
omschrijving = row[1]
bedrag_str = row[2]
dag, maand, jaar = datum_str.split('.')
transactie_datum = data.D(int(jaar)), int(maand), int(dag))
bedrag = D(bedrag_str)
meta = data.new_metadata(file.name, index)
transaction = data.Transaction(
meta=meta,
date=transactie_datum,
flag='*',
payee=omschrijving,
narration="",
tags=data.frozenset(),
links=data.frozenset(),
postings=[
data.Posting(self.file_account(file)), - bedrag, data.get_currency_meta('EUR'), None, None, None),
data.Posting("Expenses:Uncategorized", bedrag, data.get_currency_meta('EUR'), None, None, None),
]
)
entries.append(transaction)
2025-08-01 08:09:25 +00:00
return entries