From b86360904fc36da5ada2e9181acaa8018123b0a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Thu, 30 Mar 2023 13:49:05 +0200 Subject: [PATCH] Finish the loader. --- bank-account.scm | 7 +++++-- bank-fio.scm | 28 ++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/bank-account.scm b/bank-account.scm index a59acc4..495e05a 100644 --- a/bank-account.scm +++ b/bank-account.scm @@ -43,8 +43,11 @@ ;; Bank account is represented as a list with list with the following ;; elements: list of transactions, account number, bank code. This ;; allows cheap transaction prepending. - (define (make-bank-account number bank) - (list '() number bank)) + (define (make-bank-account number bank . maybe-transactions) + (let ((transactions (if (null? maybe-transactions) + '() + (car maybe-transactions)))) + (list transactions number bank))) ;; Prepends given transaction to given bank account. It expects the ;; transactions list to be the first element of the bank account diff --git a/bank-fio.scm b/bank-fio.scm index a95d6a1..4fa6dc8 100644 --- a/bank-fio.scm +++ b/bank-fio.scm @@ -32,11 +32,35 @@ ) (import scheme + (chicken base) + (chicken irregex) bank-account csv-simple) + ;; Converts Fio account statement transaction row into standardized + ;; bank transaction structure. + (define (make-fio-transaction row) + (let ((id (string->number (car row))) + (date (cadr row)) + (amount (string->number + (irregex-replace (irregex "," 'u) + (caddr row) + "."))) + (currency (cadddr row)) + (varsym (list-ref row 9))) + (make-bank-transaction id date amount currency varsym))) + + ;; Loads Fio bank accound statement. (define (bank-fio-parse fn) - (let ((csv (csv-parse fn))) - #f)) + (let* ((csv (csv-parse fn)) + (head+body (csv-split-header csv)) + (head (car head+body)) + (body (cadr head+body)) + (numrow (assoc "accountId" head)) + (num (if numrow (cadr numrow) "ERROR")) + (bankrow (assoc "bankId" head)) + (bank (if bankrow (cadr bankrow) "ERROR"))) + (make-bank-account num bank + (map make-fio-transaction body)))) )