@lucianpacurar/iso20022.js 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts
CHANGED
|
@@ -293,6 +293,8 @@ interface SWIFTCreditPaymentInstruction extends CreditPaymentInstruction {
|
|
|
293
293
|
interface SEPACreditPaymentInstruction extends CreditPaymentInstruction {
|
|
294
294
|
type?: 'sepa';
|
|
295
295
|
currency: 'EUR';
|
|
296
|
+
/** Optional requested payment execution date. If not provided, defaults to current date. */
|
|
297
|
+
requestedPaymentExecutionDate?: Date;
|
|
296
298
|
}
|
|
297
299
|
interface RTPCreditPaymentInstruction extends CreditPaymentInstruction {
|
|
298
300
|
type?: 'rtp';
|
|
@@ -900,14 +902,6 @@ declare class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
900
902
|
* @returns {string} The total sum formatted as a string with 2 decimal places.
|
|
901
903
|
*/
|
|
902
904
|
private sumAllPayments;
|
|
903
|
-
/**
|
|
904
|
-
* Calculates the sum of payment instructions for a single group.
|
|
905
|
-
* @private
|
|
906
|
-
* @param {AtLeastOne<SEPACreditPaymentInstruction>} payments - Array of payment instructions.
|
|
907
|
-
* @returns {string} The total sum formatted as a string with 2 decimal places.
|
|
908
|
-
* @throws {Error} If payment instructions have different currencies.
|
|
909
|
-
*/
|
|
910
|
-
private sumPaymentInstructions;
|
|
911
905
|
/**
|
|
912
906
|
* Validates the payment initiation data according to SEPA requirements.
|
|
913
907
|
* @private
|
package/dist/index.js
CHANGED
|
@@ -7921,20 +7921,6 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
7921
7921
|
}
|
|
7922
7922
|
return Dinero({ amount: totalAmount, currency }).toFormat('0.00');
|
|
7923
7923
|
}
|
|
7924
|
-
/**
|
|
7925
|
-
* Calculates the sum of payment instructions for a single group.
|
|
7926
|
-
* @private
|
|
7927
|
-
* @param {AtLeastOne<SEPACreditPaymentInstruction>} payments - Array of payment instructions.
|
|
7928
|
-
* @returns {string} The total sum formatted as a string with 2 decimal places.
|
|
7929
|
-
* @throws {Error} If payment instructions have different currencies.
|
|
7930
|
-
*/
|
|
7931
|
-
sumPaymentInstructions(payments) {
|
|
7932
|
-
this.validateGroupInstructionsHaveSameCurrency(payments);
|
|
7933
|
-
const instructionDineros = payments.map(instruction => Dinero({ amount: instruction.amount, currency: instruction.currency }));
|
|
7934
|
-
return instructionDineros.reduce((acc, next) => {
|
|
7935
|
-
return acc.add(next);
|
|
7936
|
-
}, Dinero({ amount: 0, currency: payments[0].currency })).toFormat('0.00');
|
|
7937
|
-
}
|
|
7938
7924
|
/**
|
|
7939
7925
|
* Validates the payment initiation data according to SEPA requirements.
|
|
7940
7926
|
* @private
|
|
@@ -7998,28 +7984,31 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
7998
7984
|
*/
|
|
7999
7985
|
serialize() {
|
|
8000
7986
|
const builder = PaymentInitiation.getBuilder();
|
|
8001
|
-
// Generate
|
|
8002
|
-
const paymentInfoEntries = this.paymentInstructions.
|
|
8003
|
-
|
|
8004
|
-
|
|
8005
|
-
|
|
8006
|
-
|
|
8007
|
-
|
|
8008
|
-
|
|
8009
|
-
|
|
8010
|
-
|
|
8011
|
-
|
|
8012
|
-
|
|
8013
|
-
|
|
8014
|
-
|
|
8015
|
-
|
|
8016
|
-
|
|
8017
|
-
|
|
8018
|
-
|
|
8019
|
-
|
|
8020
|
-
|
|
8021
|
-
|
|
8022
|
-
|
|
7987
|
+
// Generate one PmtInf entry per individual payment
|
|
7988
|
+
const paymentInfoEntries = this.paymentInstructions.flatMap((group, groupIndex) => {
|
|
7989
|
+
return group.payments.map((payment, paymentIndex) => {
|
|
7990
|
+
const dinero = Dinero({ amount: payment.amount, currency: payment.currency });
|
|
7991
|
+
const pmtInfId = sanitize(`${this.paymentInformationIdBase}-${groupIndex + 1}-${paymentIndex + 1}`, 35);
|
|
7992
|
+
const requestedExecutionDate = payment.requestedPaymentExecutionDate || new Date();
|
|
7993
|
+
return {
|
|
7994
|
+
PmtInfId: pmtInfId,
|
|
7995
|
+
PmtMtd: 'TRF',
|
|
7996
|
+
NbOfTxs: '1',
|
|
7997
|
+
CtrlSum: dinero.toFormat('0.00'),
|
|
7998
|
+
PmtTpInf: {
|
|
7999
|
+
SvcLvl: { Cd: 'SEPA' },
|
|
8000
|
+
...(group.categoryPurpose && {
|
|
8001
|
+
CtgyPurp: { Cd: group.categoryPurpose }
|
|
8002
|
+
}),
|
|
8003
|
+
},
|
|
8004
|
+
ReqdExctnDt: requestedExecutionDate.toISOString().split('T')[0],
|
|
8005
|
+
Dbtr: this.party(group.initiatingParty),
|
|
8006
|
+
DbtrAcct: this.account(group.initiatingParty.account),
|
|
8007
|
+
DbtrAgt: this.agent(group.initiatingParty.agent),
|
|
8008
|
+
ChrgBr: 'SLEV',
|
|
8009
|
+
CdtTrfTxInf: this.creditTransfer(payment),
|
|
8010
|
+
};
|
|
8011
|
+
});
|
|
8023
8012
|
});
|
|
8024
8013
|
const xml = {
|
|
8025
8014
|
'?xml': {
|
|
@@ -8029,6 +8018,7 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
8029
8018
|
Document: {
|
|
8030
8019
|
'@xmlns': 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03',
|
|
8031
8020
|
'@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
|
8021
|
+
'@xsi:schemaLocation': 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd',
|
|
8032
8022
|
CstmrCdtTrfInitn: {
|
|
8033
8023
|
GrpHdr: {
|
|
8034
8024
|
MsgId: this.messageId,
|
|
@@ -8097,6 +8087,8 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
8097
8087
|
};
|
|
8098
8088
|
// Extract optional category purpose
|
|
8099
8089
|
const categoryPurpose = pmtInf.PmtTpInf?.CtgyPurp?.Cd;
|
|
8090
|
+
// Extract requested execution date
|
|
8091
|
+
const requestedExecutionDate = pmtInf.ReqdExctnDt ? new Date(pmtInf.ReqdExctnDt) : undefined;
|
|
8100
8092
|
// Normalize CdtTrfTxInf to array
|
|
8101
8093
|
const rawInstructions = Array.isArray(pmtInf.CdtTrfTxInf)
|
|
8102
8094
|
? pmtInf.CdtTrfTxInf
|
|
@@ -8113,6 +8105,7 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
8113
8105
|
direction: 'credit',
|
|
8114
8106
|
amount: amount,
|
|
8115
8107
|
currency: currency,
|
|
8108
|
+
...(requestedExecutionDate && { requestedPaymentExecutionDate: requestedExecutionDate }),
|
|
8116
8109
|
creditor: {
|
|
8117
8110
|
name: inst.Cdtr?.Nm,
|
|
8118
8111
|
agent: parseAgent(inst.CdtrAgt),
|
package/dist/index.mjs
CHANGED
|
@@ -7919,20 +7919,6 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
7919
7919
|
}
|
|
7920
7920
|
return Dinero({ amount: totalAmount, currency }).toFormat('0.00');
|
|
7921
7921
|
}
|
|
7922
|
-
/**
|
|
7923
|
-
* Calculates the sum of payment instructions for a single group.
|
|
7924
|
-
* @private
|
|
7925
|
-
* @param {AtLeastOne<SEPACreditPaymentInstruction>} payments - Array of payment instructions.
|
|
7926
|
-
* @returns {string} The total sum formatted as a string with 2 decimal places.
|
|
7927
|
-
* @throws {Error} If payment instructions have different currencies.
|
|
7928
|
-
*/
|
|
7929
|
-
sumPaymentInstructions(payments) {
|
|
7930
|
-
this.validateGroupInstructionsHaveSameCurrency(payments);
|
|
7931
|
-
const instructionDineros = payments.map(instruction => Dinero({ amount: instruction.amount, currency: instruction.currency }));
|
|
7932
|
-
return instructionDineros.reduce((acc, next) => {
|
|
7933
|
-
return acc.add(next);
|
|
7934
|
-
}, Dinero({ amount: 0, currency: payments[0].currency })).toFormat('0.00');
|
|
7935
|
-
}
|
|
7936
7922
|
/**
|
|
7937
7923
|
* Validates the payment initiation data according to SEPA requirements.
|
|
7938
7924
|
* @private
|
|
@@ -7996,28 +7982,31 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
7996
7982
|
*/
|
|
7997
7983
|
serialize() {
|
|
7998
7984
|
const builder = PaymentInitiation.getBuilder();
|
|
7999
|
-
// Generate
|
|
8000
|
-
const paymentInfoEntries = this.paymentInstructions.
|
|
8001
|
-
|
|
8002
|
-
|
|
8003
|
-
|
|
8004
|
-
|
|
8005
|
-
|
|
8006
|
-
|
|
8007
|
-
|
|
8008
|
-
|
|
8009
|
-
|
|
8010
|
-
|
|
8011
|
-
|
|
8012
|
-
|
|
8013
|
-
|
|
8014
|
-
|
|
8015
|
-
|
|
8016
|
-
|
|
8017
|
-
|
|
8018
|
-
|
|
8019
|
-
|
|
8020
|
-
|
|
7985
|
+
// Generate one PmtInf entry per individual payment
|
|
7986
|
+
const paymentInfoEntries = this.paymentInstructions.flatMap((group, groupIndex) => {
|
|
7987
|
+
return group.payments.map((payment, paymentIndex) => {
|
|
7988
|
+
const dinero = Dinero({ amount: payment.amount, currency: payment.currency });
|
|
7989
|
+
const pmtInfId = sanitize(`${this.paymentInformationIdBase}-${groupIndex + 1}-${paymentIndex + 1}`, 35);
|
|
7990
|
+
const requestedExecutionDate = payment.requestedPaymentExecutionDate || new Date();
|
|
7991
|
+
return {
|
|
7992
|
+
PmtInfId: pmtInfId,
|
|
7993
|
+
PmtMtd: 'TRF',
|
|
7994
|
+
NbOfTxs: '1',
|
|
7995
|
+
CtrlSum: dinero.toFormat('0.00'),
|
|
7996
|
+
PmtTpInf: {
|
|
7997
|
+
SvcLvl: { Cd: 'SEPA' },
|
|
7998
|
+
...(group.categoryPurpose && {
|
|
7999
|
+
CtgyPurp: { Cd: group.categoryPurpose }
|
|
8000
|
+
}),
|
|
8001
|
+
},
|
|
8002
|
+
ReqdExctnDt: requestedExecutionDate.toISOString().split('T')[0],
|
|
8003
|
+
Dbtr: this.party(group.initiatingParty),
|
|
8004
|
+
DbtrAcct: this.account(group.initiatingParty.account),
|
|
8005
|
+
DbtrAgt: this.agent(group.initiatingParty.agent),
|
|
8006
|
+
ChrgBr: 'SLEV',
|
|
8007
|
+
CdtTrfTxInf: this.creditTransfer(payment),
|
|
8008
|
+
};
|
|
8009
|
+
});
|
|
8021
8010
|
});
|
|
8022
8011
|
const xml = {
|
|
8023
8012
|
'?xml': {
|
|
@@ -8027,6 +8016,7 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
8027
8016
|
Document: {
|
|
8028
8017
|
'@xmlns': 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03',
|
|
8029
8018
|
'@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
|
8019
|
+
'@xsi:schemaLocation': 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd',
|
|
8030
8020
|
CstmrCdtTrfInitn: {
|
|
8031
8021
|
GrpHdr: {
|
|
8032
8022
|
MsgId: this.messageId,
|
|
@@ -8095,6 +8085,8 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
8095
8085
|
};
|
|
8096
8086
|
// Extract optional category purpose
|
|
8097
8087
|
const categoryPurpose = pmtInf.PmtTpInf?.CtgyPurp?.Cd;
|
|
8088
|
+
// Extract requested execution date
|
|
8089
|
+
const requestedExecutionDate = pmtInf.ReqdExctnDt ? new Date(pmtInf.ReqdExctnDt) : undefined;
|
|
8098
8090
|
// Normalize CdtTrfTxInf to array
|
|
8099
8091
|
const rawInstructions = Array.isArray(pmtInf.CdtTrfTxInf)
|
|
8100
8092
|
? pmtInf.CdtTrfTxInf
|
|
@@ -8111,6 +8103,7 @@ class SEPAMultiCreditPaymentInitiation extends PaymentInitiation {
|
|
|
8111
8103
|
direction: 'credit',
|
|
8112
8104
|
amount: amount,
|
|
8113
8105
|
currency: currency,
|
|
8106
|
+
...(requestedExecutionDate && { requestedPaymentExecutionDate: requestedExecutionDate }),
|
|
8114
8107
|
creditor: {
|
|
8115
8108
|
name: inst.Cdtr?.Nm,
|
|
8116
8109
|
agent: parseAgent(inst.CdtrAgt),
|
package/dist/src/lib/types.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export interface SWIFTCreditPaymentInstruction extends CreditPaymentInstruction
|
|
|
38
38
|
export interface SEPACreditPaymentInstruction extends CreditPaymentInstruction {
|
|
39
39
|
type?: 'sepa';
|
|
40
40
|
currency: 'EUR';
|
|
41
|
+
/** Optional requested payment execution date. If not provided, defaults to current date. */
|
|
42
|
+
requestedPaymentExecutionDate?: Date;
|
|
41
43
|
}
|
|
42
44
|
export interface RTPCreditPaymentInstruction extends CreditPaymentInstruction {
|
|
43
45
|
type?: 'rtp';
|
|
@@ -84,14 +84,6 @@ export declare class SEPAMultiCreditPaymentInitiation extends PaymentInitiation
|
|
|
84
84
|
* @returns {string} The total sum formatted as a string with 2 decimal places.
|
|
85
85
|
*/
|
|
86
86
|
private sumAllPayments;
|
|
87
|
-
/**
|
|
88
|
-
* Calculates the sum of payment instructions for a single group.
|
|
89
|
-
* @private
|
|
90
|
-
* @param {AtLeastOne<SEPACreditPaymentInstruction>} payments - Array of payment instructions.
|
|
91
|
-
* @returns {string} The total sum formatted as a string with 2 decimal places.
|
|
92
|
-
* @throws {Error} If payment instructions have different currencies.
|
|
93
|
-
*/
|
|
94
|
-
private sumPaymentInstructions;
|
|
95
87
|
/**
|
|
96
88
|
* Validates the payment initiation data according to SEPA requirements.
|
|
97
89
|
* @private
|