feat: add 'SEB Kort Bank AB' credit card support (#325)

* feat: add 'SEB Kort Bank AB' credit card support

* add: release notes for #325

* Calculate balance correctly for SEB Kort credit cards
This commit is contained in:
Björn Wallebäck
2024-03-23 12:04:00 +01:00
committed by GitHub
parent 5fde6561d0
commit bf404104c2
3 changed files with 70 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ import SparNordSpNoDK22 from './banks/sparnord-spnodk22.js';
import Belfius from './banks/belfius_gkccbebb.js';
import SpkMarburgBiedenkopfHeladef1mar from './banks/spk-marburg-biedenkopf-heladef1mar.js';
import SEBPrivat from './banks/seb-privat.js';
import SEBKortBankAB from './banks/seb-kort-bank-ab.js';
const banks = [
AmericanExpressAesudef1,
@@ -25,6 +26,7 @@ const banks = [
Belfius,
SpkMarburgBiedenkopfHeladef1mar,
SEBPrivat,
SEBKortBankAB,
];
export default (institutionId) =>

View File

@@ -0,0 +1,62 @@
import {
printIban,
amountToInteger,
sortByBookingDateOrValueDate,
} from '../utils.js';
/** @type {import('./bank.interface.js').IBank} */
export default {
institutionIds: ['SEB_KORT_AB_SE_SKHSFI21'],
normalizeAccount(account) {
return {
account_id: account.id,
institution: account.institution,
mask: account.iban.slice(-4),
iban: account.iban,
name: [account.name, printIban(account)].join(' '),
official_name: account.product,
type: 'checking',
};
},
/**
* Sign of transaction amount needs to be flipped for SEB credit cards
*/
normalizeTransaction(transaction, _booked) {
return {
...transaction,
// Creditor name is stored in additionInformation for SEB
creditorName: transaction.additionalInformation,
date: transaction.valueDate,
transactionAmount: {
// Flip transaction amount sign
amount: (-parseFloat(transaction.transactionAmount.amount)).toString(),
currency: transaction.transactionAmount.currency,
},
};
},
sortTransactions(transactions = []) {
return sortByBookingDateOrValueDate(transactions);
},
/**
* For SEB_KORT_AB_SE_SKHSFI21 we don't know what balance was
* after each transaction so we have to calculate it by getting
* current balance from the account and subtract all the transactions
*
* As a current balance we use `expected` balance type because it
* corresponds to the current running balance, whereas `interimAvailable`
* holds the remaining credit limit.
*/
calculateStartingBalance(sortedTransactions = [], balances = []) {
const currentBalance = balances.find(
(balance) => 'expected' === balance.balanceType,
);
return sortedTransactions.reduce((total, trans) => {
return total - amountToInteger(trans.transactionAmount.amount);
}, -amountToInteger(currentBalance.balanceAmount.amount));
},
};

View File

@@ -0,0 +1,6 @@
---
category: Features
authors: [walleb]
---
Add custom bank adapter for 'SEB Kort Bank AB' to properly sync credit card transactions.