48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
|
|
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):
|
||
|
|
entries = []
|
||
|
|
|
||
|
|
print(f"Start extracting from: {file.name}")
|
||
|
|
print(f"Content will be processed from: {file.contents}")
|
||
|
|
|
||
|
|
meta = data.new_metadata(file.name, 0)
|
||
|
|
transaction = data.Transaction(
|
||
|
|
meta=meta,
|
||
|
|
date=data.D(2025, 7, 29),
|
||
|
|
flag='*',
|
||
|
|
payee="Dummy Payee",
|
||
|
|
narration="Dummy narration - REPLACE this",
|
||
|
|
tags=data.frozenset(['test']),
|
||
|
|
links=data.frozenset(),
|
||
|
|
postings=[
|
||
|
|
data.Postings("Assets:Bank:POSTBANK", D("-100.00"), data.get_currency_meta('EUR'), None, None, None),
|
||
|
|
data.Postings("Expenses:Food", D("100.00"), data.get_currency_meta('EUR'), None, None, None),
|
||
|
|
]
|
||
|
|
)
|
||
|
|
entries.append(transaction)
|
||
|
|
|
||
|
|
return entries
|