Skip to content

Commit

Permalink
Hype Bank (HYPE_HYEEIT22) Enhancements (#512)
Browse files Browse the repository at this point in the history
  • Loading branch information
guglicap authored Dec 16, 2024
1 parent 6281d54 commit 0d06bc1
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/app-gocardless/bank-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import DanskeBankDabNO22 from './banks/danskebank-dabno22.js';
import EasybankBawaatww from './banks/easybank-bawaatww.js';
import Fortuneo from './banks/FORTUNEO_FTNOFRP1XXX.js';
import HanseaticBank from './banks/HANSEATIC_HSTBDEHH.js';
import Hype_HYEEIT22 from './banks/hype_hyeeit22.js';
import IngIngbrobu from './banks/ing-ingbrobu.js';
import IngIngddeff from './banks/ing-ingddeff.js';
import IngPlIngbplpw from './banks/ing-pl-ingbplpw.js';
Expand Down Expand Up @@ -46,6 +47,7 @@ export const banks = [
EasybankBawaatww,
Fortuneo,
HanseaticBank,
Hype_HYEEIT22,
IngIngbrobu,
IngIngddeff,
IngPlIngbplpw,
Expand Down
77 changes: 77 additions & 0 deletions src/app-gocardless/banks/hype_hyeeit22.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import Fallback from './integration-bank.js';

import { formatPayeeName } from '../../util/payee-name.js';

/** @type {import('./bank.interface.js').IBank} */
export default {
...Fallback,

institutionIds: ['HYPE_HYEEIT22'],

accessValidForDays: 90,

normalizeTransaction(transaction, _booked) {
/** Online card payments - identified by "crd" transaction code
* always start with PAGAMENTO PRESSO + <payee name>
*/
if (transaction.proprietaryBankTransactionCode == 'crd') {
// remove PAGAMENTO PRESSO and set payee name
transaction.debtorName =
transaction.remittanceInformationUnstructured?.slice(
'PAGAMENTO PRESSO '.length,
);
}
/**
* In-app money transfers (p2p) and bank transfers (bon) have remittance info structure like
* DENARO (INVIATO/RICEVUTO) (A/DA) {payee_name} - {payment_info} (p2p)
* HAI (INVIATO/RICEVUTO) UN BONIFICO (A/DA) {payee_name} - {payment_info} (bon)
*/
if (
transaction.proprietaryBankTransactionCode == 'p2p' ||
transaction.proprietaryBankTransactionCode == 'bon'
) {
// keep only {payment_info} portion of remittance info
// NOTE: if {payee_name} contains dashes (unlikely / impossible?), this probably gets bugged!
let infoIdx =
transaction.remittanceInformationUnstructured.indexOf(' - ') + 3;
transaction.remittanceInformationUnstructured =
infoIdx == -1
? transaction.remittanceInformationUnstructured
: transaction.remittanceInformationUnstructured.slice(infoIdx).trim();
}
/**
* CONVERT ESCAPED UNICODE TO CODEPOINTS
* p2p payments allow user to write arbitrary unicode strings as messages
* gocardless reports unicode codepoints as \Uxxxx
* so it groups them in 4bytes bundles
* the code below assumes this is always the case
*/
if (transaction.proprietaryBankTransactionCode == 'p2p') {
let str = transaction.remittanceInformationUnstructured;
let idx = str.indexOf('\\U');
let start_idx = idx;
let codepoints = [];
while (idx !== -1) {
codepoints.push(parseInt(str.slice(idx + 2, idx + 6), 16));
let next_idx = str.indexOf('\\U', idx + 6);
if (next_idx == idx + 6) {
idx = next_idx;
continue;
}
str =
str.slice(0, start_idx) +
String.fromCodePoint(...codepoints) +
str.slice(idx + 6);
codepoints = [];
idx = str.indexOf('\\U'); // slight inefficiency?
start_idx = idx;
}
transaction.remittanceInformationUnstructured = str;
}
return {
...transaction,
payeeName: formatPayeeName(transaction),
date: transaction.valueDate || transaction.bookingDate,
};
},
};
6 changes: 6 additions & 0 deletions upcoming-release-notes/512.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
category: Enhancements
authors: [guglicap]
---

Enhances Hype Bank transaction info parsing

0 comments on commit 0d06bc1

Please sign in to comment.