29 lines
1.2 KiB
JavaScript
29 lines
1.2 KiB
JavaScript
|
|
"use strict";
|
||
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
|
exports.INSTRUMENT_ROUTING = void 0;
|
||
|
|
exports.resolveInstrumentGl = resolveInstrumentGl;
|
||
|
|
exports.isIbanValid = isIbanValid;
|
||
|
|
/** SWIFT / trade-finance instrument routing */
|
||
|
|
exports.INSTRUMENT_ROUTING = {
|
||
|
|
SBLC: { swift: ['MT103', 'MT202'], glDebit: '1410', glCredit: '2100' },
|
||
|
|
DLC: { swift: ['MT103', 'MT102'], glDebit: '1410', glCredit: '1000' },
|
||
|
|
BG: { swift: ['MT103'], glDebit: '1410', glCredit: '2100' },
|
||
|
|
LS: { swift: ['MT102', 'MT103'], glDebit: '1000', glCredit: '2200' },
|
||
|
|
};
|
||
|
|
function resolveInstrumentGl(instrument) {
|
||
|
|
const r = exports.INSTRUMENT_ROUTING[instrument];
|
||
|
|
return { debitGl: r.glDebit, creditGl: r.glCredit, swiftKinds: r.swift };
|
||
|
|
}
|
||
|
|
function isIbanValid(iban) {
|
||
|
|
const normalized = iban.replace(/\s/g, '').toUpperCase();
|
||
|
|
if (!/^[A-Z]{2}\d{2}[A-Z0-9]{11,30}$/.test(normalized))
|
||
|
|
return false;
|
||
|
|
const rearranged = normalized.slice(4) + normalized.slice(0, 4);
|
||
|
|
const numeric = rearranged.replace(/[A-Z]/g, (c) => String(c.charCodeAt(0) - 55));
|
||
|
|
let remainder = 0;
|
||
|
|
for (const ch of numeric) {
|
||
|
|
remainder = (remainder * 10 + parseInt(ch, 10)) % 97;
|
||
|
|
}
|
||
|
|
return remainder === 1;
|
||
|
|
}
|