-
-
Notifications
You must be signed in to change notification settings - Fork 641
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add GoCardless integration for ENTERCARD_SWEDNOKK #506
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,59 @@ | ||||||||||||||||||||||||||||||||||||||
import * as d from 'date-fns'; | ||||||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||||||
amountToInteger, | ||||||||||||||||||||||||||||||||||||||
printIban, | ||||||||||||||||||||||||||||||||||||||
sortByBookingDateOrValueDate, | ||||||||||||||||||||||||||||||||||||||
} from '../utils.js'; | ||||||||||||||||||||||||||||||||||||||
import { formatPayeeName } from '../../util/payee-name.js'; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
/** @type {import('./bank.interface.js').IBank} */ | ||||||||||||||||||||||||||||||||||||||
export default { | ||||||||||||||||||||||||||||||||||||||
institutionIds: ['ENTERCARD_SWEDNOKK'], | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
accessValidForDays: 180, | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
normalizeAccount(account) { | ||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||
account_id: account.id, | ||||||||||||||||||||||||||||||||||||||
institution: account.institution, | ||||||||||||||||||||||||||||||||||||||
mask: (account?.iban || '0000').slice(-4), | ||||||||||||||||||||||||||||||||||||||
iban: account?.iban || null, | ||||||||||||||||||||||||||||||||||||||
name: [account.name, printIban(account), account.currency] | ||||||||||||||||||||||||||||||||||||||
.filter(Boolean) | ||||||||||||||||||||||||||||||||||||||
.join(' '), | ||||||||||||||||||||||||||||||||||||||
official_name: `integration-${account.institution_id}`, | ||||||||||||||||||||||||||||||||||||||
type: 'checking', | ||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
normalizeTransaction(transaction, _booked) { | ||||||||||||||||||||||||||||||||||||||
// GoCardless's Entercard integration returns forex transactions with the | ||||||||||||||||||||||||||||||||||||||
// foreign amount in `transactionAmount`, but at least the amount actually | ||||||||||||||||||||||||||||||||||||||
// billed to the account is now available in | ||||||||||||||||||||||||||||||||||||||
// `remittanceInformationUnstructured`. | ||||||||||||||||||||||||||||||||||||||
const remittanceInformationUnstructured = | ||||||||||||||||||||||||||||||||||||||
transaction.remittanceInformationUnstructured; | ||||||||||||||||||||||||||||||||||||||
if (remittanceInformationUnstructured.startsWith('billingAmount: ')) { | ||||||||||||||||||||||||||||||||||||||
transaction.transactionAmount = { | ||||||||||||||||||||||||||||||||||||||
amount: remittanceInformationUnstructured.substring(15), | ||||||||||||||||||||||||||||||||||||||
currency: 'SEK', | ||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
Comment on lines
+35
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Handle undefined 'remittanceInformationUnstructured' before calling 'startsWith' If Apply this diff to fix the issue: const remittanceInformationUnstructured =
transaction.remittanceInformationUnstructured;
+if (
+ remittanceInformationUnstructured &&
+ remittanceInformationUnstructured.startsWith('billingAmount: ')
+) {
transaction.transactionAmount = {
amount: remittanceInformationUnstructured.substring(15),
currency: 'SEK',
};
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||
...transaction, | ||||||||||||||||||||||||||||||||||||||
payeeName: formatPayeeName(transaction), | ||||||||||||||||||||||||||||||||||||||
date: d.format(d.parseISO(transaction.valueDate), 'yyyy-MM-dd'), | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure 'transaction.valueDate' is defined before parsing If Apply this diff to handle undefined return {
...transaction,
payeeName: formatPayeeName(transaction),
- date: d.format(d.parseISO(transaction.valueDate), 'yyyy-MM-dd'),
+ date: transaction.valueDate
+ ? d.format(d.parseISO(transaction.valueDate), 'yyyy-MM-dd')
+ : null,
}; 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
sortTransactions(transactions = []) { | ||||||||||||||||||||||||||||||||||||||
return sortByBookingDateOrValueDate(transactions); | ||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
calculateStartingBalance(sortedTransactions = [], balances = []) { | ||||||||||||||||||||||||||||||||||||||
return sortedTransactions.reduce((total, trans) => { | ||||||||||||||||||||||||||||||||||||||
return total - amountToInteger(trans.transactionAmount.amount); | ||||||||||||||||||||||||||||||||||||||
}, amountToInteger(balances[0]?.balanceAmount?.amount || 0)); | ||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
--- | ||
category: Enhancements | ||
authors: [kyrias] | ||
--- | ||
|
||
Add GoCardless integration for ENTERCARD_SWEDNOKK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Parse and validate 'amount' to ensure it's a valid number
When extracting the amount from
remittanceInformationUnstructured
, it's important to parse and validate it to ensure it's a valid number. This prevents potential errors or injection attacks due to unexpected input formats.Apply this diff to parse and validate the
amount
:📝 Committable suggestion