-
-
Notifications
You must be signed in to change notification settings - Fork 614
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Wrong payeeName used for CBC_CREGBEBB (#451)
- Loading branch information
Showing
6 changed files
with
117 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import { extractPayeeNameFromRemittanceInfo } from './util/extract-payeeName-from-remittanceInfo.js'; | ||
import Fallback from './integration-bank.js'; | ||
|
||
/** @type {import('./bank.interface.js').IBank} */ | ||
export default { | ||
...Fallback, | ||
|
||
institutionIds: ['CBC_CREGBEBB'], | ||
|
||
/** | ||
* For negative amounts, the only payee information we have is returned in | ||
* remittanceInformationUnstructured. | ||
*/ | ||
normalizeTransaction(transaction, _booked) { | ||
if (Number(transaction.transactionAmount.amount) > 0) { | ||
return { | ||
...transaction, | ||
payeeName: | ||
transaction.debtorName || | ||
transaction.remittanceInformationUnstructured, | ||
date: transaction.bookingDate || transaction.valueDate, | ||
}; | ||
} | ||
|
||
return { | ||
...transaction, | ||
payeeName: | ||
transaction.creditorName || | ||
extractPayeeNameFromRemittanceInfo( | ||
transaction.remittanceInformationUnstructured, | ||
['Paiement', 'Domiciliation', 'Transfert', 'Ordre permanent'], | ||
), | ||
date: transaction.bookingDate || transaction.valueDate, | ||
}; | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import CBCcregbebb from '../cbc_cregbebb.js'; | ||
|
||
describe('cbc_cregbebb', () => { | ||
describe('#normalizeTransaction', () => { | ||
it('returns the remittanceInformationUnstructured as payeeName when the amount is negative', () => { | ||
const transaction = { | ||
remittanceInformationUnstructured: | ||
'ONKART FR Viry Paiement Maestro par Carte de débit CBC 05-09-2024 à 15.43 heures 6703 19XX XXXX X201 5 JOHN DOE', | ||
transactionAmount: { amount: '-45.00', currency: 'EUR' }, | ||
}; | ||
const normalizedTransaction = CBCcregbebb.normalizeTransaction( | ||
transaction, | ||
true, | ||
); | ||
expect(normalizedTransaction.payeeName).toEqual('ONKART FR Viry'); | ||
}); | ||
|
||
it('returns the debtorName as payeeName when the amount is positive', () => { | ||
const transaction = { | ||
debtorName: 'ONKART FR Viry', | ||
remittanceInformationUnstructured: | ||
'ONKART FR Viry Paiement Maestro par Carte de débit CBC 05-09-2024 à 15.43 heures 6703 19XX XXXX X201 5 JOHN DOE', | ||
transactionAmount: { amount: '10.99', currency: 'EUR' }, | ||
}; | ||
const normalizedTransaction = CBCcregbebb.normalizeTransaction( | ||
transaction, | ||
true, | ||
); | ||
expect(normalizedTransaction.payeeName).toEqual('ONKART FR Viry'); | ||
}); | ||
}); | ||
}); |
36 changes: 36 additions & 0 deletions
36
src/app-gocardless/banks/util/extract-payeeName-from-remittanceInfo.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/** | ||
/** | ||
* Extracts the payee name from the unstructured remittance information string based on pattern detection. | ||
* | ||
* This function scans the `remittanceInformationUnstructured` string for the presence of | ||
* any of the specified patterns and removes the substring from the position of the last | ||
* occurrence of the most relevant pattern. If no patterns are found, it returns the original string. | ||
* | ||
* @param {string} [remittanceInformationUnstructured=''] - The unstructured remittance information from which to extract the payee name. | ||
* @param {string[]} [patterns=[]] - An array of patterns to look for within the remittance information. | ||
* These patterns are used to identify and remove unwanted parts of the remittance information. | ||
* @returns {string} - The extracted payee name, cleaned of any matched patterns, or the original | ||
* remittance information if no patterns are found. | ||
* | ||
* @example | ||
* const remittanceInfo = 'John Doe Paiement Maestro par Carte de débit CBC 05-09-2024 à 15.43 heures 6703 19XX XXXX X...'; | ||
* const patterns = ['Paiement', 'Domiciliation', 'Transfert', 'Ordre permanent']; | ||
* const payeeName = extractPayeeNameFromRemittanceInfo(remittanceInfo, patterns); // --> 'John Doe' | ||
*/ | ||
export function extractPayeeNameFromRemittanceInfo( | ||
remittanceInformationUnstructured, | ||
patterns, | ||
) { | ||
if (!remittanceInformationUnstructured || !patterns.length) { | ||
return remittanceInformationUnstructured; | ||
} | ||
|
||
const indexForRemoval = patterns.reduce((maxIndex, pattern) => { | ||
const index = remittanceInformationUnstructured.lastIndexOf(pattern); | ||
return index > maxIndex ? index : maxIndex; | ||
}, -1); | ||
|
||
return indexForRemoval > -1 | ||
? remittanceInformationUnstructured.substring(0, indexForRemoval).trim() | ||
: remittanceInformationUnstructured; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
--- | ||
category: Bugfix | ||
authors: [MMichotte] | ||
--- | ||
|
||
Fix wrong payeeName used for CBC_CREGBEBB |