Double entry & first account mapping

This commit is contained in:
2025-08-01 12:31:16 +00:00
parent d453213466
commit b24f25b939

View File

@@ -29,35 +29,76 @@ class MyCSVImporter(importer.ImporterProtocol):
with open(file.contents, encoding='utf-8') with open(file.contents, encoding='utf-8')
as f: as f:
reader = csv.reader(f, delimiter=',') reader = csv.reader(f, delimiter=';')
for skip in range(0,8):
next(reader, None) next(reader, None)
for index, row in enumerate(reader): for index, row in enumerate(reader):
if not row or not row[0]: if not row or not row[0]:
continue continue
# De index begint bij 0, dus de 12e kolom is index 11.
# Boekingsdatum = index 0
# Ontvanger = index 3
# Omschrijving = index 4
# Bedrag = index 11
# Valuta = index 17
datum_str = row[0] datum_str = row[0]
omschrijving = row[1] ontvanter = row[3]
bedrag_str = row[2] omschrijving_str = row[4]
bedrag_str = row[11]
valuta = row [17]
dag, maand, jaar = datum_str.split('.') dag, maand, jaar = datum_str.split('.')
transactie_datum = data.D(int(jaar)), int(maand), int(dag)) transactie_datum = data.D(int(jaar)), int(maand), int(dag))
bedrag = D(bedrag_str)
payee = ontvanter
narration = omschrijving_str
bedrag = D(bedrag_str).replace(',','.')
meta = data.new_metadata(file.name, index) meta = data.new_metadata(file.name, index)
# Bepaal of het een inkomst of uitgave is op basis van het voorteken van het bedrag.
if bedrag < D(0):
# Uitgave: bedrag is negatief.
# Geld gaat van de bankrekening naar een uitgavenrekening.
tegenrekening = self._map_payee_to_account(payee + " " + omschrijving_str)
postings = [
data.Posting(self.file_account(file), bedrag, data.get_currency_meta(currency), None, None, None),
data.Posting(tegenrekening, -bedrag, data.get_currency_meta(currency), None, None, None),
]
else:
# Inkomsten: bedrag is positief.
# Geld gaat van een inkomstenrekening naar de bankrekening.
tegenrekening = self._map_payee_to_account(payee + " " + omschrijving_str)
postings = [
data.Posting(tegenrekening, -bedrag, data.get_currency_meta(currency), None, None, None),
data.Posting(self.file_account(file), bedrag, data.get_currency_meta(currency), None, None, None),
]
transaction = data.Transaction( transaction = data.Transaction(
meta=meta, meta=meta,
date=transactie_datum, date=transactie_datum,
flag='*', flag='*',
payee=omschrijving, payee=payee,
narration="", narration=narration,
tags=data.frozenset(), tags=data.frozenset(),
links=data.frozenset(), links=data.frozenset(),
postings=[ postings=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) entries.append(transaction)
return entries return entries
def _map_payee_to_account(self, payee):
mapping = {
"Lohn": "Income:Salary",
"Miete": "Expenses:Rent",
"Sachsen":"Expenses:Electricity",
}
for sleutelwoord, rekening in mapping.items():
if sleutelwoord.lower() in payee.lower():
return rekening
return "Expenses:Uncategorized"