mirror of
https://github.com/actualbudget/actual.git
synced 2026-03-09 03:32:54 -05:00
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:
@@ -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) =>
|
||||
|
||||
62
src/app-gocardless/banks/seb-kort-bank-ab.js
Normal file
62
src/app-gocardless/banks/seb-kort-bank-ab.js
Normal 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));
|
||||
},
|
||||
};
|
||||
6
upcoming-release-notes/325.md
Normal file
6
upcoming-release-notes/325.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
category: Features
|
||||
authors: [walleb]
|
||||
---
|
||||
|
||||
Add custom bank adapter for 'SEB Kort Bank AB' to properly sync credit card transactions.
|
||||
Reference in New Issue
Block a user