diff --git a/src/app-gocardless/banks/swedbank-habalv22.js b/src/app-gocardless/banks/swedbank-habalv22.js index 5602b3ca27..87c745cd1c 100644 --- a/src/app-gocardless/banks/swedbank-habalv22.js +++ b/src/app-gocardless/banks/swedbank-habalv22.js @@ -14,17 +14,36 @@ export default { * The actual transaction date for card transactions is only available in the remittanceInformationUnstructured field when the transaction is booked. */ normalizeTransaction(transaction, booked) { - const dateMatch = transaction.remittanceInformationUnstructured?.match( - /PIRKUMS [\d*]+ (\d{2}.\d{2}.\d{4})/, - ); + const isCardTransaction = + transaction.remittanceInformationUnstructured?.startsWith('PIRKUMS'); - if (dateMatch) { - const extractedDate = d.parse(dateMatch[1], 'dd.MM.yyyy', new Date()); + if (isCardTransaction) { + if (!booked && !transaction.creditorName) { + const creditorNameMatch = + transaction.remittanceInformationUnstructured?.match( + /PIRKUMS [\d*]+ \d{2}\.\d{2}\.\d{2} \d{2}:\d{2} [\d.]+ \w{3} \(\d+\) (.+)/, + ); - return Fallback.normalizeTransaction( - { ...transaction, bookingDate: d.format(extractedDate, 'yyyy-MM-dd') }, - booked, + if (creditorNameMatch) { + transaction = { + ...transaction, + creditorName: creditorNameMatch[1], + }; + } + } + + const dateMatch = transaction.remittanceInformationUnstructured?.match( + /PIRKUMS [\d*]+ (\d{2}\.\d{2}\.\d{4})/, ); + + if (dateMatch) { + const extractedDate = d.parse(dateMatch[1], 'dd.MM.yyyy', new Date()); + + transaction = { + ...transaction, + bookingDate: d.format(extractedDate, 'yyyy-MM-dd'), + }; + } } return Fallback.normalizeTransaction(transaction, booked); diff --git a/src/app-gocardless/banks/tests/swedbank-habalv22.spec.js b/src/app-gocardless/banks/tests/swedbank-habalv22.spec.js index 02a163238f..91e2e01217 100644 --- a/src/app-gocardless/banks/tests/swedbank-habalv22.spec.js +++ b/src/app-gocardless/banks/tests/swedbank-habalv22.spec.js @@ -1,7 +1,7 @@ import SwedbankHabaLV22 from '../swedbank-habalv22.js'; describe('#normalizeTransaction', () => { - const cardTransaction = { + const bookedCardTransaction = { transactionId: '2024102900000000-1', bookingDate: '2024-10-29', valueDate: '2024-10-29', @@ -18,11 +18,12 @@ describe('#normalizeTransaction', () => { it('extracts card transaction date', () => { expect( - SwedbankHabaLV22.normalizeTransaction(cardTransaction, true).bookingDate, + SwedbankHabaLV22.normalizeTransaction(bookedCardTransaction, true) + .bookingDate, ).toEqual('2024-10-28'); expect( - SwedbankHabaLV22.normalizeTransaction(cardTransaction, true).date, + SwedbankHabaLV22.normalizeTransaction(bookedCardTransaction, true).date, ).toEqual('2024-10-28'); }); @@ -32,7 +33,7 @@ describe('#normalizeTransaction', () => { ['null value', null], ])('normalizes non-card transaction with %s', (_, remittanceInfo) => { const transaction = { - ...cardTransaction, + ...bookedCardTransaction, remittanceInformationUnstructured: remittanceInfo, }; const normalized = SwedbankHabaLV22.normalizeTransaction(transaction, true); @@ -40,4 +41,22 @@ describe('#normalizeTransaction', () => { expect(normalized.bookingDate).toEqual('2024-10-29'); expect(normalized.date).toEqual('2024-10-29'); }); + + const pendingCardTransaction = { + transactionId: '2024102900000000-1', + valueDate: '2024-10-29', + transactionAmount: { + amount: '-22.99', + currency: 'EUR', + }, + remittanceInformationUnstructured: + 'PIRKUMS 424242******4242 28.10.24 13:37 22.99 EUR (111111) SOME CREDITOR NAME', + }; + + it('extracts pending card transaction creditor name', () => { + expect( + SwedbankHabaLV22.normalizeTransaction(pendingCardTransaction, false) + .creditorName, + ).toEqual('SOME CREDITOR NAME'); + }); }); diff --git a/upcoming-release-notes/497.md b/upcoming-release-notes/497.md new file mode 100644 index 0000000000..0836318c8a --- /dev/null +++ b/upcoming-release-notes/497.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [dmednis] +--- + +Improve support for "SWEDBANK_HABALV22" transaction date & enrich creditor name for pending transactions \ No newline at end of file