lib-fints 1.4.2 → 1.4.3
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/README.md +1 -1
- package/dist/camtParser.js +3 -0
- package/dist/tests/camtParser.test.js +185 -0
- package/dist/types/camtParser.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[](https://github.com/robocode13/lib-fints/actions/workflows/ci.yml)
|
|
2
2
|
|
|
3
3
|
# Lib-FinTS
|
|
4
4
|
|
package/dist/camtParser.js
CHANGED
|
@@ -167,6 +167,9 @@ export class CamtParser {
|
|
|
167
167
|
if (typeof current === 'string' || typeof current === 'number') {
|
|
168
168
|
return String(current);
|
|
169
169
|
}
|
|
170
|
+
if (Array.isArray(current)) {
|
|
171
|
+
return String(current.join(''));
|
|
172
|
+
}
|
|
170
173
|
if (current && typeof current === 'object' && current !== null && '#text' in current) {
|
|
171
174
|
return String(current['#text']);
|
|
172
175
|
}
|
|
@@ -670,4 +670,189 @@ describe('CamtParser', () => {
|
|
|
670
670
|
expect(transaction.purpose).toBe('Payment with party structure');
|
|
671
671
|
expect(transaction.amount).toBe(200.0);
|
|
672
672
|
});
|
|
673
|
+
it('should handle multiple entries in RmtInf (Ustrd)', () => {
|
|
674
|
+
const camtXml = `<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
675
|
+
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.08"
|
|
676
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
677
|
+
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.052.001.08 camt.052.001.08.xsd">
|
|
678
|
+
<BkToCstmrAcctRpt>
|
|
679
|
+
<GrpHdr>
|
|
680
|
+
<MsgId>52D20260106T1009246445830N000000000</MsgId>
|
|
681
|
+
<CreDtTm>2026-01-06T10:09:24.0+01:00</CreDtTm>
|
|
682
|
+
</GrpHdr>
|
|
683
|
+
<Rpt>
|
|
684
|
+
<Id>0752D522026010610092464000001000</Id>
|
|
685
|
+
<RptPgntn>
|
|
686
|
+
<PgNb>1</PgNb>
|
|
687
|
+
<LastPgInd>true</LastPgInd>
|
|
688
|
+
</RptPgntn>
|
|
689
|
+
<ElctrncSeqNb>000000000</ElctrncSeqNb>
|
|
690
|
+
<CreDtTm>2026-01-06T10:09:24.0+01:00</CreDtTm>
|
|
691
|
+
<Acct>
|
|
692
|
+
<Id>
|
|
693
|
+
<IBAN>DE06940594210000027227</IBAN>
|
|
694
|
+
</Id>
|
|
695
|
+
<Ccy>EUR</Ccy>
|
|
696
|
+
<Ownr>
|
|
697
|
+
<Nm>John Doe</Nm>
|
|
698
|
+
</Ownr>
|
|
699
|
+
<Svcr>
|
|
700
|
+
<FinInstnId>
|
|
701
|
+
<BICFI>BANKABC1XXX</BICFI>
|
|
702
|
+
<Nm>ABC Bank</Nm>
|
|
703
|
+
<Othr>
|
|
704
|
+
<Id>DE 123456789</Id>
|
|
705
|
+
<Issr>UmsStId</Issr>
|
|
706
|
+
</Othr>
|
|
707
|
+
</FinInstnId>
|
|
708
|
+
</Svcr>
|
|
709
|
+
</Acct>
|
|
710
|
+
<Bal>
|
|
711
|
+
<Tp>
|
|
712
|
+
<CdOrPrtry>
|
|
713
|
+
<Cd>OPBD</Cd>
|
|
714
|
+
</CdOrPrtry>
|
|
715
|
+
</Tp>
|
|
716
|
+
<Amt Ccy="EUR">27.31</Amt>
|
|
717
|
+
<CdtDbtInd>DBIT</CdtDbtInd>
|
|
718
|
+
<Dt>
|
|
719
|
+
<Dt>2026-01-05</Dt>
|
|
720
|
+
</Dt>
|
|
721
|
+
</Bal>
|
|
722
|
+
<Bal>
|
|
723
|
+
<Tp>
|
|
724
|
+
<CdOrPrtry>
|
|
725
|
+
<Cd>CLBD</Cd>
|
|
726
|
+
</CdOrPrtry>
|
|
727
|
+
</Tp>
|
|
728
|
+
<Amt Ccy="EUR">234.81</Amt>
|
|
729
|
+
<CdtDbtInd>DBIT</CdtDbtInd>
|
|
730
|
+
<Dt>
|
|
731
|
+
<Dt>2026-01-05</Dt>
|
|
732
|
+
</Dt>
|
|
733
|
+
</Bal>
|
|
734
|
+
<Ntry>
|
|
735
|
+
<Amt Ccy="EUR">179.46</Amt>
|
|
736
|
+
<CdtDbtInd>DBIT</CdtDbtInd>
|
|
737
|
+
<Sts>
|
|
738
|
+
<Cd>BOOK</Cd>
|
|
739
|
+
</Sts>
|
|
740
|
+
<BookgDt>
|
|
741
|
+
<Dt>2026-01-05</Dt>
|
|
742
|
+
</BookgDt>
|
|
743
|
+
<ValDt>
|
|
744
|
+
<Dt>2026-01-05</Dt>
|
|
745
|
+
</ValDt>
|
|
746
|
+
<AcctSvcrRef>TXN003</AcctSvcrRef>
|
|
747
|
+
<BkTxCd>
|
|
748
|
+
<Domn>
|
|
749
|
+
<Cd>PMNT</Cd>
|
|
750
|
+
<Fmly>
|
|
751
|
+
<Cd>ICDT</Cd>
|
|
752
|
+
<SubFmlyCd>ESCT</SubFmlyCd>
|
|
753
|
+
</Fmly>
|
|
754
|
+
</Domn>
|
|
755
|
+
<Prtry>
|
|
756
|
+
<Cd>NTRF+116+02089</Cd>
|
|
757
|
+
<Issr>DK</Issr>
|
|
758
|
+
</Prtry>
|
|
759
|
+
</BkTxCd>
|
|
760
|
+
<NtryDtls>
|
|
761
|
+
<TxDtls>
|
|
762
|
+
<Refs>
|
|
763
|
+
<MsgId>test msgid</MsgId>
|
|
764
|
+
<PmtInfId>VG 2025 QUARTAL IV 12345678</PmtInfId>
|
|
765
|
+
<EndToEndId>VG 2025 QUARTAL IV</EndToEndId>
|
|
766
|
+
</Refs>
|
|
767
|
+
<Amt Ccy="EUR">179.46</Amt>
|
|
768
|
+
<BkTxCd>
|
|
769
|
+
<Domn>
|
|
770
|
+
<Cd>PMNT</Cd>
|
|
771
|
+
<Fmly>
|
|
772
|
+
<Cd>ICDT</Cd>
|
|
773
|
+
<SubFmlyCd>ESCT</SubFmlyCd>
|
|
774
|
+
</Fmly>
|
|
775
|
+
</Domn>
|
|
776
|
+
<Prtry>
|
|
777
|
+
<Cd>NTRF+116+02189</Cd>
|
|
778
|
+
<Issr>DK</Issr>
|
|
779
|
+
</Prtry>
|
|
780
|
+
</BkTxCd>
|
|
781
|
+
<RltdPties>
|
|
782
|
+
<Dbtr>
|
|
783
|
+
<Pty>
|
|
784
|
+
<Nm>DOE</Nm>
|
|
785
|
+
</Pty>
|
|
786
|
+
</Dbtr>
|
|
787
|
+
<DbtrAcct>
|
|
788
|
+
<Id>
|
|
789
|
+
<IBAN>DE12345678901234567890</IBAN>
|
|
790
|
+
</Id>
|
|
791
|
+
</DbtrAcct>
|
|
792
|
+
<Cdtr>
|
|
793
|
+
<Pty>
|
|
794
|
+
<Nm>ABC Bank</Nm>
|
|
795
|
+
</Pty>
|
|
796
|
+
</Cdtr>
|
|
797
|
+
<CdtrAcct>
|
|
798
|
+
<Id>
|
|
799
|
+
<IBAN>DE12345678901234567891</IBAN>
|
|
800
|
+
</Id>
|
|
801
|
+
</CdtrAcct>
|
|
802
|
+
</RltdPties>
|
|
803
|
+
<RltdAgts>
|
|
804
|
+
<CdtrAgt>
|
|
805
|
+
<FinInstnId>
|
|
806
|
+
<BICFI>BANKABC1XXX</BICFI>
|
|
807
|
+
</FinInstnId>
|
|
808
|
+
</CdtrAgt>
|
|
809
|
+
</RltdAgts>
|
|
810
|
+
<RmtInf>
|
|
811
|
+
<Ustrd>28,65EUR EREF: VG 2025 QUARTAL IV IBAN</Ustrd>
|
|
812
|
+
<Ustrd>: DE12345678901234567891 BIC: BANKABC1XXX</Ustrd>
|
|
813
|
+
</RmtInf>
|
|
814
|
+
</TxDtls>
|
|
815
|
+
</NtryDtls>
|
|
816
|
+
<AddtlNtryInf>ENTGELT gem. Vereinbarung</AddtlNtryInf>
|
|
817
|
+
</Ntry>
|
|
818
|
+
</Rpt>
|
|
819
|
+
</BkToCstmrAcctRpt>
|
|
820
|
+
</Document>`;
|
|
821
|
+
const parser = new CamtParser(camtXml);
|
|
822
|
+
const statements = parser.parse();
|
|
823
|
+
expect(statements).toHaveLength(1);
|
|
824
|
+
const statement = statements[0];
|
|
825
|
+
expect(statement.transactions).toHaveLength(1);
|
|
826
|
+
const transaction = statement.transactions[0];
|
|
827
|
+
// Check all Transaction fields filled by the parser
|
|
828
|
+
expect(transaction.amount).toBe(-179.46);
|
|
829
|
+
expect(transaction.customerReference).toBe('VG 2025 QUARTAL IV');
|
|
830
|
+
expect(transaction.bankReference).toBe('TXN003');
|
|
831
|
+
expect(transaction.purpose).toBe('28,65EUR EREF: VG 2025 QUARTAL IV IBAN: DE12345678901234567891 BIC: BANKABC1XXX');
|
|
832
|
+
expect(transaction.remoteName).toBe('ABC Bank');
|
|
833
|
+
expect(transaction.remoteAccountNumber).toBe('DE12345678901234567891');
|
|
834
|
+
expect(transaction.remoteBankId).toBe('BANKABC1XXX');
|
|
835
|
+
expect(transaction.e2eReference).toBe('VG 2025 QUARTAL IV');
|
|
836
|
+
// Check date fields
|
|
837
|
+
expect(transaction.valueDate).toBeInstanceOf(Date);
|
|
838
|
+
expect(transaction.valueDate.getFullYear()).toBe(2026);
|
|
839
|
+
expect(transaction.valueDate.getMonth()).toBe(0); // November (0-based)
|
|
840
|
+
expect(transaction.valueDate.getDate()).toBe(5);
|
|
841
|
+
expect(transaction.entryDate).toBeInstanceOf(Date);
|
|
842
|
+
expect(transaction.entryDate.getFullYear()).toBe(2026);
|
|
843
|
+
expect(transaction.entryDate.getMonth()).toBe(0); // November (0-based)
|
|
844
|
+
expect(transaction.entryDate.getDate()).toBe(5);
|
|
845
|
+
// Check transaction type and code fields
|
|
846
|
+
expect(transaction.fundsCode).toBe('PMNT');
|
|
847
|
+
expect(transaction.transactionType).toBe('ICDT');
|
|
848
|
+
expect(transaction.transactionCode).toBe('ESCT');
|
|
849
|
+
// Check additional information fields
|
|
850
|
+
expect(transaction.additionalInformation).toBe('ENTGELT gem. Vereinbarung');
|
|
851
|
+
expect(transaction.bookingText).toBe('ENTGELT gem. Vereinbarung'); // Should match additionalInformation
|
|
852
|
+
// Verify optional fields not set in this test
|
|
853
|
+
expect(transaction.primeNotesNr).toBeUndefined();
|
|
854
|
+
expect(transaction.remoteIdentifier).toBeUndefined();
|
|
855
|
+
expect(transaction.client).toBeUndefined();
|
|
856
|
+
expect(transaction.textKeyExtension).toBeUndefined();
|
|
857
|
+
});
|
|
673
858
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camtParser.d.ts","sourceRoot":"","sources":["../../src/camtParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,SAAS,EAAe,MAAM,gBAAgB,CAAC;AAsJtE,qBAAa,gBAAiB,SAAQ,KAAK;IAGlC,KAAK,CAAC;gBADb,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,mBAAO;CAKrB;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,OAAO,EAAE,MAAM;IAoB3B,KAAK,IAAI,SAAS,EAAE;IA8CpB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAwEnB,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"camtParser.d.ts","sourceRoot":"","sources":["../../src/camtParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,SAAS,EAAe,MAAM,gBAAgB,CAAC;AAsJtE,qBAAa,gBAAiB,SAAQ,KAAK;IAGlC,KAAK,CAAC;gBADb,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,mBAAO;CAKrB;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,OAAO,EAAE,MAAM;IAoB3B,KAAK,IAAI,SAAS,EAAE;IA8CpB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAwEnB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,aAAa;IAuFrB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;IA8ExB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,wBAAwB;CAyBhC"}
|