lib-fints 1.1.1 → 1.2.0
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 +4 -0
- package/dist/client.js +33 -0
- package/dist/index.js +1 -0
- package/dist/interactions/portfolioInteraction.js +57 -0
- package/dist/mt535parser.js +196 -0
- package/dist/partedSegment.js +4 -1
- package/dist/segment.js +3 -5
- package/dist/segmentDefinition.js +4 -1
- package/dist/segments/HIBPA.js +4 -1
- package/dist/segments/HIKAZ.js +4 -1
- package/dist/segments/HIKAZS.js +2 -2
- package/dist/segments/HIKIM.js +4 -1
- package/dist/segments/HIKOM.js +4 -1
- package/dist/segments/HIPINS.js +2 -2
- package/dist/segments/HIRMG.js +4 -1
- package/dist/segments/HIRMS.js +4 -1
- package/dist/segments/HISAL.js +4 -1
- package/dist/segments/HISYN.js +4 -1
- package/dist/segments/HITAB.js +4 -1
- package/dist/segments/HITAN.js +4 -1
- package/dist/segments/HITANS.js +2 -2
- package/dist/segments/HIUPA.js +4 -1
- package/dist/segments/HIUPD.js +4 -1
- package/dist/segments/HIWPD.js +15 -0
- package/dist/segments/HKEND.js +4 -1
- package/dist/segments/HKIDN.js +4 -1
- package/dist/segments/HKKAZ.js +4 -1
- package/dist/segments/HKSAL.js +4 -1
- package/dist/segments/HKSYN.js +4 -1
- package/dist/segments/HKTAB.js +4 -1
- package/dist/segments/HKTAN.js +4 -1
- package/dist/segments/HKVVB.js +4 -1
- package/dist/segments/HKWPD.js +23 -0
- package/dist/segments/HNHBK.js +4 -1
- package/dist/segments/HNHBS.js +4 -1
- package/dist/segments/HNSHA.js +4 -1
- package/dist/segments/HNSHK.js +4 -1
- package/dist/segments/HNVSD.js +5 -2
- package/dist/segments/HNVSK.js +5 -2
- package/dist/segments/businessTransactionParameter.js +2 -2
- package/dist/segments/registry.js +4 -0
- package/dist/tests/HIWPD.test.js +25 -0
- package/dist/tests/HKWPD.test.js +38 -0
- package/dist/tests/mt535parser.test.js +157 -0
- package/dist/types/client.d.ts +24 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interactions/portfolioInteraction.d.ts +39 -0
- package/dist/types/interactions/portfolioInteraction.d.ts.map +1 -0
- package/dist/types/mt535parser.d.ts +44 -0
- package/dist/types/mt535parser.d.ts.map +1 -0
- package/dist/types/partedSegment.d.ts +1 -0
- package/dist/types/partedSegment.d.ts.map +1 -1
- package/dist/types/segment.d.ts.map +1 -1
- package/dist/types/segmentDefinition.d.ts +1 -0
- package/dist/types/segmentDefinition.d.ts.map +1 -1
- package/dist/types/segments/HIBPA.d.ts +1 -0
- package/dist/types/segments/HIBPA.d.ts.map +1 -1
- package/dist/types/segments/HIKAZ.d.ts +1 -0
- package/dist/types/segments/HIKAZ.d.ts.map +1 -1
- package/dist/types/segments/HIKAZS.d.ts.map +1 -1
- package/dist/types/segments/HIKIM.d.ts +1 -0
- package/dist/types/segments/HIKIM.d.ts.map +1 -1
- package/dist/types/segments/HIKOM.d.ts +1 -0
- package/dist/types/segments/HIKOM.d.ts.map +1 -1
- package/dist/types/segments/HIPINS.d.ts.map +1 -1
- package/dist/types/segments/HIRMG.d.ts +1 -0
- package/dist/types/segments/HIRMG.d.ts.map +1 -1
- package/dist/types/segments/HIRMS.d.ts +1 -0
- package/dist/types/segments/HIRMS.d.ts.map +1 -1
- package/dist/types/segments/HISAL.d.ts +1 -0
- package/dist/types/segments/HISAL.d.ts.map +1 -1
- package/dist/types/segments/HISYN.d.ts +1 -0
- package/dist/types/segments/HISYN.d.ts.map +1 -1
- package/dist/types/segments/HITAB.d.ts +1 -0
- package/dist/types/segments/HITAB.d.ts.map +1 -1
- package/dist/types/segments/HITAN.d.ts +1 -0
- package/dist/types/segments/HITAN.d.ts.map +1 -1
- package/dist/types/segments/HITANS.d.ts.map +1 -1
- package/dist/types/segments/HIUPA.d.ts +1 -0
- package/dist/types/segments/HIUPA.d.ts.map +1 -1
- package/dist/types/segments/HIUPD.d.ts +1 -0
- package/dist/types/segments/HIUPD.d.ts.map +1 -1
- package/dist/types/segments/HIWPD.d.ts +22 -0
- package/dist/types/segments/HIWPD.d.ts.map +1 -0
- package/dist/types/segments/HKEND.d.ts +1 -0
- package/dist/types/segments/HKEND.d.ts.map +1 -1
- package/dist/types/segments/HKIDN.d.ts +1 -0
- package/dist/types/segments/HKIDN.d.ts.map +1 -1
- package/dist/types/segments/HKKAZ.d.ts +1 -0
- package/dist/types/segments/HKKAZ.d.ts.map +1 -1
- package/dist/types/segments/HKSAL.d.ts +1 -0
- package/dist/types/segments/HKSAL.d.ts.map +1 -1
- package/dist/types/segments/HKSYN.d.ts +1 -0
- package/dist/types/segments/HKSYN.d.ts.map +1 -1
- package/dist/types/segments/HKTAB.d.ts +1 -0
- package/dist/types/segments/HKTAB.d.ts.map +1 -1
- package/dist/types/segments/HKTAN.d.ts +1 -0
- package/dist/types/segments/HKTAN.d.ts.map +1 -1
- package/dist/types/segments/HKVVB.d.ts +1 -0
- package/dist/types/segments/HKVVB.d.ts.map +1 -1
- package/dist/types/segments/HKWPD.d.ts +43 -0
- package/dist/types/segments/HKWPD.d.ts.map +1 -0
- package/dist/types/segments/HNHBK.d.ts +1 -0
- package/dist/types/segments/HNHBK.d.ts.map +1 -1
- package/dist/types/segments/HNHBS.d.ts +1 -0
- package/dist/types/segments/HNHBS.d.ts.map +1 -1
- package/dist/types/segments/HNSHA.d.ts +1 -0
- package/dist/types/segments/HNSHA.d.ts.map +1 -1
- package/dist/types/segments/HNSHK.d.ts +1 -0
- package/dist/types/segments/HNSHK.d.ts.map +1 -1
- package/dist/types/segments/HNVSD.d.ts +1 -0
- package/dist/types/segments/HNVSD.d.ts.map +1 -1
- package/dist/types/segments/HNVSK.d.ts +1 -0
- package/dist/types/segments/HNVSK.d.ts.map +1 -1
- package/dist/types/segments/businessTransactionParameter.d.ts +1 -1
- package/dist/types/segments/businessTransactionParameter.d.ts.map +1 -1
- package/dist/types/segments/registry.d.ts.map +1 -1
- package/dist/types/tests/HIWPD.test.d.ts +2 -0
- package/dist/types/tests/HIWPD.test.d.ts.map +1 -0
- package/dist/types/tests/HKWPD.test.d.ts +2 -0
- package/dist/types/tests/HKWPD.test.d.ts.map +1 -0
- package/dist/types/tests/mt535parser.test.d.ts +2 -0
- package/dist/types/tests/mt535parser.test.d.ts.map +1 -0
- package/dist/types/unknownSegment.d.ts +1 -0
- package/dist/types/unknownSegment.d.ts.map +1 -1
- package/dist/unknownSegment.js +4 -1
- package/package.json +1 -1
package/dist/segments/HKSYN.js
CHANGED
|
@@ -4,8 +4,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
4
4
|
* Synchonisation
|
|
5
5
|
*/
|
|
6
6
|
export class HKSYN extends SegmentDefinition {
|
|
7
|
-
static Id =
|
|
7
|
+
static Id = 'HKSYN';
|
|
8
8
|
static Version = 3;
|
|
9
|
+
constructor() {
|
|
10
|
+
super(HKSYN.Id);
|
|
11
|
+
}
|
|
9
12
|
version = HKSYN.Version;
|
|
10
13
|
elements = [new Numeric('mode', 1, 1, 1)];
|
|
11
14
|
}
|
package/dist/segments/HKTAB.js
CHANGED
|
@@ -5,8 +5,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
5
5
|
* Request TAN media
|
|
6
6
|
*/
|
|
7
7
|
export class HKTAB extends SegmentDefinition {
|
|
8
|
-
static Id =
|
|
8
|
+
static Id = 'HKTAB';
|
|
9
9
|
static Version = 5;
|
|
10
|
+
constructor() {
|
|
11
|
+
super(HKTAB.Id);
|
|
12
|
+
}
|
|
10
13
|
version = HKTAB.Version;
|
|
11
14
|
elements = [new Numeric('mediaType', 1, 1, 1), new AlphaNumeric('mediaClass', 1, 1, 1)];
|
|
12
15
|
}
|
package/dist/segments/HKTAN.js
CHANGED
|
@@ -9,8 +9,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
9
9
|
* Two-Step TAN
|
|
10
10
|
*/
|
|
11
11
|
export class HKTAN extends SegmentDefinition {
|
|
12
|
-
static Id =
|
|
12
|
+
static Id = 'HKTAN';
|
|
13
13
|
static Version = 7;
|
|
14
|
+
constructor() {
|
|
15
|
+
super(HKTAN.Id);
|
|
16
|
+
}
|
|
14
17
|
version = HKTAN.Version;
|
|
15
18
|
elements = [
|
|
16
19
|
new AlphaNumeric('tanProcess', 1, 1, 1),
|
package/dist/segments/HKVVB.js
CHANGED
|
@@ -5,8 +5,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
5
5
|
* Identification
|
|
6
6
|
*/
|
|
7
7
|
export class HKVVB extends SegmentDefinition {
|
|
8
|
-
static Id =
|
|
8
|
+
static Id = 'HKVVB';
|
|
9
9
|
static Version = 3;
|
|
10
|
+
constructor() {
|
|
11
|
+
super(HKVVB.Id);
|
|
12
|
+
}
|
|
10
13
|
version = HKVVB.Version;
|
|
11
14
|
elements = [
|
|
12
15
|
new Numeric('bpdVersion', 1, 1, 3),
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AccountGroup } from '../dataGroups/Account.js';
|
|
2
|
+
import { AlphaNumeric } from '../dataElements/AlphaNumeric.js';
|
|
3
|
+
import { Numeric } from '../dataElements/Numeric.js';
|
|
4
|
+
import { SegmentDefinition } from '../segmentDefinition.js';
|
|
5
|
+
/**
|
|
6
|
+
* Geschäftsvorfälle: C.4.3.1 Depotaufstellung
|
|
7
|
+
* Version: 6
|
|
8
|
+
*/
|
|
9
|
+
export class HKWPD extends SegmentDefinition {
|
|
10
|
+
static Id = 'HKWPD';
|
|
11
|
+
static Version = 6;
|
|
12
|
+
constructor() {
|
|
13
|
+
super(HKWPD.Id);
|
|
14
|
+
}
|
|
15
|
+
version = HKWPD.Version;
|
|
16
|
+
elements = [
|
|
17
|
+
new AccountGroup('depot', 1, 1),
|
|
18
|
+
new AlphaNumeric('currency', 0, 1, 3),
|
|
19
|
+
new AlphaNumeric('priceQuality', 0, 1, 1),
|
|
20
|
+
new Numeric('maxEntries', 0, 1, 4),
|
|
21
|
+
new AlphaNumeric('paginationMarker', 0, 1, 35),
|
|
22
|
+
];
|
|
23
|
+
}
|
package/dist/segments/HNHBK.js
CHANGED
|
@@ -7,8 +7,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
7
7
|
* Message header
|
|
8
8
|
*/
|
|
9
9
|
export class HNHBK extends SegmentDefinition {
|
|
10
|
-
static Id =
|
|
10
|
+
static Id = 'HNHBK';
|
|
11
11
|
static Version = 3;
|
|
12
|
+
constructor() {
|
|
13
|
+
super(HNHBK.Id);
|
|
14
|
+
}
|
|
12
15
|
version = HNHBK.Version;
|
|
13
16
|
elements = [
|
|
14
17
|
new Digits('messageLength', 1, 1, 12),
|
package/dist/segments/HNHBS.js
CHANGED
|
@@ -4,8 +4,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
4
4
|
* Message end
|
|
5
5
|
*/
|
|
6
6
|
export class HNHBS extends SegmentDefinition {
|
|
7
|
-
static Id =
|
|
7
|
+
static Id = 'HNHBS';
|
|
8
8
|
static Version = 1;
|
|
9
|
+
constructor() {
|
|
10
|
+
super(HNHBS.Id);
|
|
11
|
+
}
|
|
9
12
|
version = HNHBS.Version;
|
|
10
13
|
elements = [new Numeric('msgNr', 1, 1, 4)];
|
|
11
14
|
}
|
package/dist/segments/HNSHA.js
CHANGED
|
@@ -6,8 +6,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
6
6
|
* Signature end
|
|
7
7
|
*/
|
|
8
8
|
export class HNSHA extends SegmentDefinition {
|
|
9
|
-
static Id =
|
|
9
|
+
static Id = 'HNSHA';
|
|
10
10
|
static Version = 2;
|
|
11
|
+
constructor() {
|
|
12
|
+
super(HNSHA.Id);
|
|
13
|
+
}
|
|
11
14
|
version = HNSHA.Version;
|
|
12
15
|
elements = [
|
|
13
16
|
new AlphaNumeric('secControlRef', 1, 1, 14),
|
package/dist/segments/HNSHK.js
CHANGED
|
@@ -12,8 +12,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
12
12
|
* Signature Header
|
|
13
13
|
*/
|
|
14
14
|
export class HNSHK extends SegmentDefinition {
|
|
15
|
-
static Id =
|
|
15
|
+
static Id = 'HNSHK';
|
|
16
16
|
static Version = 4;
|
|
17
|
+
constructor() {
|
|
18
|
+
super(HNSHK.Id);
|
|
19
|
+
}
|
|
17
20
|
version = HNSHK.Version;
|
|
18
21
|
elements = [
|
|
19
22
|
new DataGroup('secProfile', [new AlphaNumeric('secMethod', 1, 1, 3), new Numeric('secVersion', 1, 1, 3)], 1, 1),
|
package/dist/segments/HNVSD.js
CHANGED
|
@@ -4,8 +4,11 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
4
4
|
* Encrypted data
|
|
5
5
|
*/
|
|
6
6
|
export class HNVSD extends SegmentDefinition {
|
|
7
|
-
static Id =
|
|
7
|
+
static Id = 'HNVSD';
|
|
8
8
|
static Version = 1;
|
|
9
|
-
|
|
9
|
+
constructor() {
|
|
10
|
+
super(HNVSD.Id);
|
|
11
|
+
}
|
|
12
|
+
version = 1;
|
|
10
13
|
elements = [new Binary('encryptedData', 1, 1)];
|
|
11
14
|
}
|
package/dist/segments/HNVSK.js
CHANGED
|
@@ -11,9 +11,12 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
11
11
|
* Encryption body
|
|
12
12
|
*/
|
|
13
13
|
export class HNVSK extends SegmentDefinition {
|
|
14
|
-
static Id =
|
|
14
|
+
static Id = 'HNVSK';
|
|
15
15
|
static Version = 3;
|
|
16
|
-
|
|
16
|
+
constructor() {
|
|
17
|
+
super(HNVSK.Id);
|
|
18
|
+
}
|
|
19
|
+
version = 3;
|
|
17
20
|
elements = [
|
|
18
21
|
new DataGroup('secProfile', [new AlphaNumeric('secMethod', 1, 1, 3), new Numeric('secVersion', 1, 1, 3)], 1, 1),
|
|
19
22
|
new Numeric('secFunc', 1, 1, 3),
|
|
@@ -7,8 +7,8 @@ import { SegmentDefinition } from '../segmentDefinition.js';
|
|
|
7
7
|
export class BusinessTransactionParameter extends SegmentDefinition {
|
|
8
8
|
paramElements;
|
|
9
9
|
elements;
|
|
10
|
-
constructor(paramElements, secClassMinVersion = 1) {
|
|
11
|
-
super();
|
|
10
|
+
constructor(id, paramElements, secClassMinVersion = 1) {
|
|
11
|
+
super(id);
|
|
12
12
|
this.paramElements = paramElements;
|
|
13
13
|
this.elements = [
|
|
14
14
|
new Numeric('maxTrans', 1, 1, 3),
|
|
@@ -27,6 +27,8 @@ import { HKKAZ } from './HKKAZ.js';
|
|
|
27
27
|
import { HIKAZ } from './HIKAZ.js';
|
|
28
28
|
import { HIKAZS } from './HIKAZS.js';
|
|
29
29
|
import { HITAB } from './HITAB.js';
|
|
30
|
+
import { HKWPD } from './HKWPD.js';
|
|
31
|
+
import { HIWPD } from './HIWPD.js';
|
|
30
32
|
import { UNKNOW } from '../unknownSegment.js';
|
|
31
33
|
import { PARTED } from '../partedSegment.js';
|
|
32
34
|
const registry = new Map();
|
|
@@ -60,6 +62,8 @@ export function registerSegments() {
|
|
|
60
62
|
registerSegmentDefinition(new HKKAZ());
|
|
61
63
|
registerSegmentDefinition(new HIKAZ());
|
|
62
64
|
registerSegmentDefinition(new HIKAZS());
|
|
65
|
+
registerSegmentDefinition(new HKWPD());
|
|
66
|
+
registerSegmentDefinition(new HIWPD());
|
|
63
67
|
registerSegmentDefinition(new UNKNOW());
|
|
64
68
|
registerSegmentDefinition(new PARTED());
|
|
65
69
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { registerSegments } from '../segments/registry.js';
|
|
3
|
+
import { decode, encode } from '../segment.js';
|
|
4
|
+
registerSegments();
|
|
5
|
+
describe('HIWPD', () => {
|
|
6
|
+
it('decode and encode roundtrip matches', () => {
|
|
7
|
+
const portfolioData = 'U29tZSBTd2lmdCBNVCA1MzUvNTcxIGRhdGE=';
|
|
8
|
+
const text = `HIWPD:1:6+${portfolioData}'`;
|
|
9
|
+
const segment = decode(text);
|
|
10
|
+
expect(segment.portfolioStatement).toBe(portfolioData);
|
|
11
|
+
const expectedEncodedText = `HIWPD:1:6+@${portfolioData.length}@${portfolioData}'`;
|
|
12
|
+
expect(encode(segment)).toBe(expectedEncodedText);
|
|
13
|
+
});
|
|
14
|
+
it('handles empty portfolio data', () => {
|
|
15
|
+
const text = "HIWPD:1:6+@@'";
|
|
16
|
+
const segment = decode(text);
|
|
17
|
+
expect(segment.portfolioStatement).toBe('');
|
|
18
|
+
});
|
|
19
|
+
it('handles large portfolio data', () => {
|
|
20
|
+
const largeData = 'A'.repeat(1000);
|
|
21
|
+
const text = `HIWPD:1:6+${largeData}'`;
|
|
22
|
+
const segment = decode(text);
|
|
23
|
+
expect(segment.portfolioStatement).toBe(largeData);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { registerSegments } from '../segments/registry.js';
|
|
3
|
+
import { decode, encode } from '../segment.js';
|
|
4
|
+
registerSegments();
|
|
5
|
+
describe('HKWPD', () => {
|
|
6
|
+
it('decode and encode roundtrip matches with all fields', () => {
|
|
7
|
+
const text = "HKWPD:2:6+12345678901234567890:EUR:276:280+EUR+1+100+NextMarkerABC123'";
|
|
8
|
+
const segment = decode(text);
|
|
9
|
+
expect(segment.depot.accountNumber).toBe('12345678901234567890');
|
|
10
|
+
expect(segment.depot.subAccountId).toBe('EUR');
|
|
11
|
+
expect(segment.depot.bank.country).toBe(276);
|
|
12
|
+
expect(segment.depot.bank.bankId).toBe('280');
|
|
13
|
+
expect(segment.currency).toBe('EUR');
|
|
14
|
+
expect(segment.priceQuality).toBe('1');
|
|
15
|
+
expect(segment.maxEntries).toBe(100);
|
|
16
|
+
expect(segment.paginationMarker).toBe('NextMarkerABC123');
|
|
17
|
+
expect(encode(segment)).toBe(text);
|
|
18
|
+
});
|
|
19
|
+
it('decode and encode roundtrip matches with minimal fields', () => {
|
|
20
|
+
const text = "HKWPD:1:6+9876543210::276:280'";
|
|
21
|
+
const segment = decode(text);
|
|
22
|
+
expect(segment.depot.accountNumber).toBe('9876543210');
|
|
23
|
+
expect(segment.depot.subAccountId).toBeUndefined();
|
|
24
|
+
expect(segment.depot.bank.country).toBe(276);
|
|
25
|
+
expect(segment.depot.bank.bankId).toBe('280');
|
|
26
|
+
expect(segment.currency).toBeUndefined();
|
|
27
|
+
expect(segment.priceQuality).toBeUndefined();
|
|
28
|
+
expect(segment.maxEntries).toBeUndefined();
|
|
29
|
+
expect(segment.paginationMarker).toBeUndefined();
|
|
30
|
+
const encoded = encode(segment);
|
|
31
|
+
expect(encoded).toBe("HKWPD:1:6+9876543210::276:280'");
|
|
32
|
+
const decodedAgain = decode(encoded);
|
|
33
|
+
expect(decodedAgain.depot.accountNumber).toBe('9876543210');
|
|
34
|
+
expect(decodedAgain.depot.subAccountId).toBeUndefined();
|
|
35
|
+
expect(decodedAgain.depot.bank.country).toBe(276);
|
|
36
|
+
expect(decodedAgain.depot.bank.bankId).toBe('280');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { Mt535Parser } from '../mt535parser.js';
|
|
3
|
+
describe('Mt535Parser', () => {
|
|
4
|
+
it('parses a MT535 input string with depot value and multiple holdings', () => {
|
|
5
|
+
const input = ':16R:ADDINFO\r\n' +
|
|
6
|
+
'EUR125000,50\r\n' +
|
|
7
|
+
':16S:ADDINFO\r\n' +
|
|
8
|
+
// Holding 1 (BMW)
|
|
9
|
+
':16R:FIN\r\n' +
|
|
10
|
+
':35B:ISIN DE0005190003/DE/519000BAY.MOTOREN WERKE AG ST:\r\n' +
|
|
11
|
+
':70E::HOLD//100STK275,30+EUR\r\n' +
|
|
12
|
+
':90B::PREFIX_11_CEUR100,50:\r\n' +
|
|
13
|
+
':93B::QTY/AVALBLX100,:\r\n' +
|
|
14
|
+
':98A::SETT//DTE20231101:\r\n' +
|
|
15
|
+
':16S:FIN\r\n' +
|
|
16
|
+
// Holding 2 (Apple)
|
|
17
|
+
':16R:FIN\r\n' +
|
|
18
|
+
':35B:ISIN US0378331005/US/037833Apple Inc. Common Stock:\r\n' +
|
|
19
|
+
':70E::HOLD//50STK2150,75+USD\r\n' +
|
|
20
|
+
':90A::PRIC/RATE_X85,50:\r\n' +
|
|
21
|
+
':93B::QTY/AVALBLX50,:\r\n' +
|
|
22
|
+
':98C::TRADTE20231101143000:\r\n' +
|
|
23
|
+
':16S:FIN\r\n';
|
|
24
|
+
const parser = new Mt535Parser(input);
|
|
25
|
+
const statement = parser.parse();
|
|
26
|
+
// Test depot value
|
|
27
|
+
expect(statement.totalValue).toBe(125000.5);
|
|
28
|
+
expect(statement.holdings).toHaveLength(2);
|
|
29
|
+
// Test first holding (BMW)
|
|
30
|
+
const bmwHolding = statement.holdings[0];
|
|
31
|
+
expect(bmwHolding.isin).toBe('DE0005190003');
|
|
32
|
+
expect(bmwHolding.wkn).toBe('519000');
|
|
33
|
+
expect(bmwHolding.name).toBe('BAY.MOTOREN WERKE AG ST');
|
|
34
|
+
expect(bmwHolding.acquisitionPrice).toBe(75.3);
|
|
35
|
+
expect(bmwHolding.price).toBe(100.5);
|
|
36
|
+
expect(bmwHolding.currency).toBe('EUR');
|
|
37
|
+
expect(bmwHolding.amount).toBe(100);
|
|
38
|
+
expect(bmwHolding.value).toBe(10050);
|
|
39
|
+
expect(bmwHolding.date).toEqual(new Date(2023, 10, 1, 0, 0, 0));
|
|
40
|
+
// Test second holding (Apple)
|
|
41
|
+
const appleHolding = statement.holdings[1];
|
|
42
|
+
expect(appleHolding.isin).toBe('US0378331005');
|
|
43
|
+
expect(appleHolding.wkn).toBe('037833');
|
|
44
|
+
expect(appleHolding.name).toBe('Apple Inc. Common Stock');
|
|
45
|
+
expect(appleHolding.acquisitionPrice).toBe(150.75);
|
|
46
|
+
expect(appleHolding.price).toBe(0.855);
|
|
47
|
+
expect(appleHolding.currency).toBe('%');
|
|
48
|
+
expect(appleHolding.amount).toBe(50);
|
|
49
|
+
expect(appleHolding.value).toBe(42.75);
|
|
50
|
+
expect(appleHolding.date).toEqual(new Date(2023, 10, 1, 14, 30, 0));
|
|
51
|
+
});
|
|
52
|
+
it('parses MT535 with @@ dividers and different data points', () => {
|
|
53
|
+
const input = ':16R:ADDINFO@@' +
|
|
54
|
+
'EUR50000,25@@' +
|
|
55
|
+
':16S:ADDINFO@@' +
|
|
56
|
+
':16R:FIN@@' +
|
|
57
|
+
':35B:ISIN DE0007164600/DE/716460SAP SE:@@' +
|
|
58
|
+
':70E::HOLD//25STK2120,80+EUR@@' +
|
|
59
|
+
':90B::UNKNOWNVALXEUR115,75:@@' +
|
|
60
|
+
':93B::SOMESTATUS_25,:@@' +
|
|
61
|
+
':98A::REGD//DTE20231215:@@' +
|
|
62
|
+
':16S:FIN@@';
|
|
63
|
+
const parser = new Mt535Parser(input);
|
|
64
|
+
const statement = parser.parse();
|
|
65
|
+
expect(statement.totalValue).toBe(50000.25);
|
|
66
|
+
expect(statement.holdings).toHaveLength(1);
|
|
67
|
+
const holding = statement.holdings[0];
|
|
68
|
+
expect(holding.isin).toBe('DE0007164600');
|
|
69
|
+
expect(holding.wkn).toBe('716460');
|
|
70
|
+
expect(holding.name).toBe('SAP SE');
|
|
71
|
+
expect(holding.acquisitionPrice).toBe(120.8);
|
|
72
|
+
expect(holding.price).toBe(115.75);
|
|
73
|
+
expect(holding.currency).toBe('EUR');
|
|
74
|
+
expect(holding.amount).toBe(25);
|
|
75
|
+
expect(holding.value).toBe(2893.75);
|
|
76
|
+
expect(holding.date).toEqual(new Date(2023, 11, 15));
|
|
77
|
+
});
|
|
78
|
+
it('handles empty input', () => {
|
|
79
|
+
const parser = new Mt535Parser('');
|
|
80
|
+
const statement = parser.parse();
|
|
81
|
+
expect(statement.totalValue).toBeUndefined();
|
|
82
|
+
expect(statement.holdings).toHaveLength(0);
|
|
83
|
+
});
|
|
84
|
+
it('handles input without depot value', () => {
|
|
85
|
+
const input = ':16R:FIN\r\n' +
|
|
86
|
+
':35B:ISIN DE0005190003/DE/519000SOME OTHER AG ST:\r\n' +
|
|
87
|
+
':90B::PREFIX_11_CEUR100,50:\r\n' +
|
|
88
|
+
':93B::QTY/AVALBLX100,:\r\n' +
|
|
89
|
+
':98A::SETT//DTE20231101:\r\n' +
|
|
90
|
+
':16S:FIN\r\n';
|
|
91
|
+
const parser = new Mt535Parser(input);
|
|
92
|
+
const statement = parser.parse();
|
|
93
|
+
expect(statement.totalValue).toBeUndefined();
|
|
94
|
+
expect(statement.holdings).toHaveLength(1);
|
|
95
|
+
expect(statement.holdings[0].isin).toBe('DE0005190003');
|
|
96
|
+
expect(statement.holdings[0].name).toBe('SOME OTHER AG ST');
|
|
97
|
+
expect(statement.holdings[0].price).toBe(100.5);
|
|
98
|
+
expect(statement.holdings[0].amount).toBe(100);
|
|
99
|
+
});
|
|
100
|
+
it('handles input without holdings', () => {
|
|
101
|
+
const input = ':16R:ADDINFO\r\n' + 'EUR75000,00\r\n' + ':16S:ADDINFO\r\n';
|
|
102
|
+
const parser = new Mt535Parser(input);
|
|
103
|
+
const statement = parser.parse();
|
|
104
|
+
expect(statement.totalValue).toBe(75000.0);
|
|
105
|
+
expect(statement.holdings).toHaveLength(0);
|
|
106
|
+
});
|
|
107
|
+
it('handles holding with minimal data (only security identification)', () => {
|
|
108
|
+
const input = ':16R:FIN\r\n' +
|
|
109
|
+
':35B:ISIN FR0000120271/FR/120271AIR LIQUIDE SA: \r\n' +
|
|
110
|
+
':16S:FIN\r\n';
|
|
111
|
+
const parser = new Mt535Parser(input);
|
|
112
|
+
const statement = parser.parse();
|
|
113
|
+
expect(statement.holdings).toHaveLength(1);
|
|
114
|
+
const holding = statement.holdings[0];
|
|
115
|
+
expect(holding.isin).toBe('FR0000120271');
|
|
116
|
+
expect(holding.wkn).toBe('120271');
|
|
117
|
+
expect(holding.name).toBe('AIR LIQUIDE SA');
|
|
118
|
+
expect(holding.price).toBeUndefined();
|
|
119
|
+
expect(holding.amount).toBeUndefined();
|
|
120
|
+
expect(holding.value).toBeUndefined();
|
|
121
|
+
expect(holding.date).toBeUndefined();
|
|
122
|
+
});
|
|
123
|
+
it('calculates value correctly for percentage currency when price is from :90A', () => {
|
|
124
|
+
const input = ':16R:FIN\r\n' +
|
|
125
|
+
':35B:ISIN US0378331005/US/037833Apple Inc. Common Stock:\r\n' +
|
|
126
|
+
':90A::PRIC/RATE_X85,50:\r\n' +
|
|
127
|
+
':93B::QTY/AVALBLX100,:\r\n' +
|
|
128
|
+
':16S:FIN\r\n';
|
|
129
|
+
const parser = new Mt535Parser(input);
|
|
130
|
+
const statement = parser.parse();
|
|
131
|
+
const holding = statement.holdings[0];
|
|
132
|
+
expect(holding.currency).toBe('%');
|
|
133
|
+
expect(holding.price).toBe(0.855);
|
|
134
|
+
expect(holding.amount).toBe(100);
|
|
135
|
+
expect(holding.value).toBe(85.5);
|
|
136
|
+
});
|
|
137
|
+
it('correctly parses date and time for :98C', () => {
|
|
138
|
+
const input = ':16R:FIN\r\n' +
|
|
139
|
+
':35B:ISIN DE000BASF111/DE/BASF11BASF SE:\r\n' +
|
|
140
|
+
':98C::QUALIF20240115093045:\r\n' +
|
|
141
|
+
':16S:FIN\r\n';
|
|
142
|
+
const parser = new Mt535Parser(input);
|
|
143
|
+
const statement = parser.parse();
|
|
144
|
+
const holding = statement.holdings[0];
|
|
145
|
+
expect(holding.date).toEqual(new Date(2024, 0, 15, 9, 30, 45));
|
|
146
|
+
});
|
|
147
|
+
it('correctly parses date for :98A (time defaults to 00:00:00)', () => {
|
|
148
|
+
const input = ':16R:FIN\r\n' +
|
|
149
|
+
':35B:ISIN DE000BAY0017/DE/BAY001BAYER AG:\r\n' +
|
|
150
|
+
':98A::SETT//DTE20231005:\r\n' +
|
|
151
|
+
':16S:FIN\r\n';
|
|
152
|
+
const parser = new Mt535Parser(input);
|
|
153
|
+
const statement = parser.parse();
|
|
154
|
+
const holding = statement.holdings[0];
|
|
155
|
+
expect(holding.date).toEqual(new Date(2023, 9, 5, 0, 0, 0));
|
|
156
|
+
});
|
|
157
|
+
});
|
package/dist/types/client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StatementResponse } from './interactions/statementInteraction.js';
|
|
2
2
|
import { AccountBalanceResponse } from './interactions/balanceInteraction.js';
|
|
3
|
+
import { PortfolioResponse } from './interactions/portfolioInteraction.js';
|
|
3
4
|
import { FinTSConfig } from './config.js';
|
|
4
5
|
import { TanMethod } from './tanMethod.js';
|
|
5
6
|
import { InitResponse } from './interactions/initDialogInteraction.js';
|
|
@@ -79,6 +80,29 @@ export declare class FinTSClient {
|
|
|
79
80
|
* @returns an account statements response containing an array of statements
|
|
80
81
|
*/
|
|
81
82
|
getAccountStatementsWithTan(tanReference: string, tan?: string): Promise<StatementResponse>;
|
|
83
|
+
/**
|
|
84
|
+
* Checks if the bank supports fetching portfolio information in general or for the given account number when provided
|
|
85
|
+
* @param accountNumber when the account number is provided, checks if the account supports fetching of portfolio information
|
|
86
|
+
* @returns true if the bank (and account) supports fetching portfolio information
|
|
87
|
+
*/
|
|
88
|
+
canGetPortfolio(accountNumber?: string): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Fetches the portfolio information for the given depot account number
|
|
91
|
+
* @param accountNumber - the depot account number to fetch the portfolio for, must be an account available in the config.bankingInformation.UPD.accounts
|
|
92
|
+
* @param currency - optional currency filter for the portfolio statement
|
|
93
|
+
* @param priceQuality - optional price quality filter ('1' for real-time, '2' for delayed)
|
|
94
|
+
* @param maxEntries - optional maximum number of entries to retrieve
|
|
95
|
+
* @returns a portfolio response containing holdings and total value
|
|
96
|
+
*/
|
|
97
|
+
getPortfolio(accountNumber: string, currency?: string, priceQuality?: '1' | '2', maxEntries?: number): Promise<PortfolioResponse>;
|
|
98
|
+
/**
|
|
99
|
+
* Continues the portfolio fetching when a TAN is required
|
|
100
|
+
* @param tanReference The TAN reference provided in the first call's response
|
|
101
|
+
|
|
102
|
+
* @param tan The TAN entered by the user, can be omitted if a decoupled TAN method is used
|
|
103
|
+
* @returns a portfolio response containing holdings and total value
|
|
104
|
+
*/
|
|
105
|
+
getPortfolioWithTan(tanReference: string, tan?: string): Promise<PortfolioResponse>;
|
|
82
106
|
private startCustomerOrderInteraction;
|
|
83
107
|
private continueCustomerInteractionWithTan;
|
|
84
108
|
private initDialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAsB,MAAM,sCAAsC,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAsB,MAAM,sCAAsC,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,OAAO,EAAyB,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE9F,MAAM,WAAW,mBAAoB,SAAQ,YAAY;CAAG;AAE5D;;GAEG;AACH,qBAAa,WAAW;IAOJ,MAAM,EAAE,WAAW;IANtC,OAAO,CAAC,wBAAwB,CAA0C;IAE1E;;;OAGG;gBACgB,MAAM,EAAE,WAAW;IAUtC;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAK/C;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI1C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwBjD;;;;;OAKG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI1F;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMrD;;;;OAIG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI/E;;;;;OAKG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAInG;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMxD;;;;;;OAMG;IACG,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIrG;;;;;OAKG;IACG,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIjG;;;;OAIG;IACH,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMhD;;;;;;;OAOG;IACG,YAAY,CACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,EACxB,UAAU,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;OAMG;IACG,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAI3E,6BAA6B;YAqB7B,kCAAkC;YA0ClC,UAAU;CAcxB"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './config.js';
|
|
|
3
3
|
export { ClientResponse } from './interactions/customerInteraction.js';
|
|
4
4
|
export { AccountBalanceResponse } from './interactions/balanceInteraction.js';
|
|
5
5
|
export { StatementResponse } from './interactions/statementInteraction.js';
|
|
6
|
+
export { PortfolioResponse } from './interactions/portfolioInteraction.js';
|
|
6
7
|
export * from './segment.js';
|
|
7
8
|
export * from './message.js';
|
|
8
9
|
export * from './dialog.js';
|
|
@@ -14,4 +15,5 @@ export * from './accountBalance.js';
|
|
|
14
15
|
export * from './bpd.js';
|
|
15
16
|
export * from './upd.js';
|
|
16
17
|
export * from './mt940parser.js';
|
|
18
|
+
export * from './mt535parser.js';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ClientResponse, CustomerOrderInteraction } from './customerInteraction.js';
|
|
2
|
+
import { FinTSConfig } from '../config.js';
|
|
3
|
+
import { Message } from '../message.js';
|
|
4
|
+
import { Segment } from '../segment.js';
|
|
5
|
+
import { StatementOfHoldings, Holding } from '../mt535parser.js';
|
|
6
|
+
/**
|
|
7
|
+
* Represents a single holding within a stock portfolio.
|
|
8
|
+
* This is an alias for the Holding interface from the MT535 parser.
|
|
9
|
+
*/
|
|
10
|
+
export type PortfolioHolding = Holding;
|
|
11
|
+
/**
|
|
12
|
+
* Represents the structured portfolio data parsed from an MT535 message.
|
|
13
|
+
* This is an alias for the StatementOfHoldings interface from the MT535 parser.
|
|
14
|
+
*/
|
|
15
|
+
export type ParsedPortfolioStatement = StatementOfHoldings;
|
|
16
|
+
export interface PortfolioResponse extends ClientResponse {
|
|
17
|
+
/**
|
|
18
|
+
* The parsed portfolio statement containing holdings and total value
|
|
19
|
+
*/
|
|
20
|
+
portfolioStatement?: ParsedPortfolioStatement;
|
|
21
|
+
/**
|
|
22
|
+
* Raw MT535 data if parsing fails
|
|
23
|
+
*/
|
|
24
|
+
rawMT535Data?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Interaction for requesting and parsing stock portfolio information (HKWPD/HIWPD)
|
|
28
|
+
*/
|
|
29
|
+
export declare class PortfolioInteraction extends CustomerOrderInteraction {
|
|
30
|
+
accountNumber: string;
|
|
31
|
+
private currency?;
|
|
32
|
+
private priceQuality?;
|
|
33
|
+
private maxEntries?;
|
|
34
|
+
private paginationMarker?;
|
|
35
|
+
constructor(accountNumber: string, currency?: string | undefined, priceQuality?: "1" | "2" | undefined, maxEntries?: number | undefined, paginationMarker?: string | undefined);
|
|
36
|
+
createSegments(config: FinTSConfig): Segment[];
|
|
37
|
+
handleResponse(response: Message, clientResponse: PortfolioResponse): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=portfolioInteraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolioInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/portfolioInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAe,mBAAmB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE9E;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;OAEG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,wBAAwB;IAEvD,aAAa,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,gBAAgB,CAAC;gBAJlB,aAAa,EAAE,MAAM,EACpB,QAAQ,CAAC,oBAAQ,EACjB,YAAY,CAAC,uBAAW,EACxB,UAAU,CAAC,oBAAQ,EACnB,gBAAgB,CAAC,oBAAQ;IAKnC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE;IA8B9C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI;CAe3E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface StatementOfHoldings {
|
|
2
|
+
totalValue?: number;
|
|
3
|
+
currency?: string;
|
|
4
|
+
holdings: Holding[];
|
|
5
|
+
}
|
|
6
|
+
export interface Holding {
|
|
7
|
+
isin?: string;
|
|
8
|
+
wkn?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
amount?: number;
|
|
11
|
+
price?: number;
|
|
12
|
+
currency?: string;
|
|
13
|
+
value?: number;
|
|
14
|
+
acquisitionPrice?: number;
|
|
15
|
+
date?: Date;
|
|
16
|
+
}
|
|
17
|
+
export declare enum TokenType535 {
|
|
18
|
+
DepotValueBlock = "DepotValueBlock",
|
|
19
|
+
DepotValueCurrency = "DepotValueCurrency",
|
|
20
|
+
FinBlock = "FinBlock",
|
|
21
|
+
SecurityIdentification = "SecurityIdentification",
|
|
22
|
+
AcquisitionPrice = "AcquisitionPrice",
|
|
23
|
+
PriceBlock = "PriceBlock",
|
|
24
|
+
AmountBlock = "AmountBlock",
|
|
25
|
+
DateTimeBlock = "DateTimeBlock",
|
|
26
|
+
DateString = "DateString",
|
|
27
|
+
TimeString = "TimeString"
|
|
28
|
+
}
|
|
29
|
+
export declare class Mt535Parser {
|
|
30
|
+
private rawData;
|
|
31
|
+
private cleanedRawData;
|
|
32
|
+
constructor(rawData: string);
|
|
33
|
+
parse(): StatementOfHoldings;
|
|
34
|
+
private parseDepotValue;
|
|
35
|
+
private parseHoldings;
|
|
36
|
+
private parseHolding;
|
|
37
|
+
private parseSecurityIdentification;
|
|
38
|
+
private parseAcquisitionPrice;
|
|
39
|
+
private parsePrice;
|
|
40
|
+
private parseAmount;
|
|
41
|
+
private parseDateTime;
|
|
42
|
+
private parseDate;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=mt535parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mt535parser.d.ts","sourceRoot":"","sources":["../../src/mt535parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,oBAAY,YAAY;IACtB,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,QAAQ,aAAa;IACrB,sBAAsB,2BAA2B;IACjD,gBAAgB,qBAAqB;IACrC,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;CAC1B;AAgBD,qBAAa,WAAW;IAGV,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,cAAc,CAAS;gBAEX,OAAO,EAAE,MAAM;IAWnC,KAAK,IAAI,mBAAmB;IAc5B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,2BAA2B;IAyBnC,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,UAAU;IA8BlB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,SAAS;CAgBlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partedSegment.d.ts","sourceRoot":"","sources":["../../src/partedSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"partedSegment.d.ts","sourceRoot":"","sources":["../../src/partedSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,MAAO,SAAQ,iBAAiB;IAC5C,MAAM,CAAC,EAAE,SAAY;;IAIrB,OAAO,SAAK;IACZ,QAAQ,SAA+B;CACvC;AAED,eAAO,MAAM,QAAQ,QAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/segment.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACrB,MAAM,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6B5C;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQ5C;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/segment.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACrB,MAAM,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6B5C;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQ5C;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAyBxD"}
|
|
@@ -3,6 +3,7 @@ import { Segment } from './segment.js';
|
|
|
3
3
|
import { SegmentHeaderGroup } from './segmentHeader.js';
|
|
4
4
|
export declare abstract class SegmentDefinition {
|
|
5
5
|
id: string;
|
|
6
|
+
constructor(id: string);
|
|
6
7
|
abstract version: number;
|
|
7
8
|
static header: SegmentHeaderGroup;
|
|
8
9
|
abstract elements: DataElement[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmentDefinition.d.ts","sourceRoot":"","sources":["../../src/segmentDefinition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,8BAAsB,iBAAiB;IACtC,EAAE,
|
|
1
|
+
{"version":3,"file":"segmentDefinition.d.ts","sourceRoot":"","sources":["../../src/segmentDefinition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,8BAAsB,iBAAiB;IACtC,EAAE,EAAE,MAAM,CAAC;gBAEC,EAAE,EAAE,MAAM;IAItB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,MAAM,qBAA4B;IACzC,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IAEjC,qBAAqB,CAAC,OAAO,EAAE,MAAM;IAMrC,MAAM,CAAC,IAAI,EAAE,OAAO;CAKpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HIBPA.d.ts","sourceRoot":"","sources":["../../../src/segments/HIBPA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGhD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"HIBPA.d.ts","sourceRoot":"","sources":["../../../src/segments/HIBPA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGhD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,KAAM,SAAQ,iBAAiB;IAC3C,MAAM,CAAC,EAAE,SAAW;IACpB,OAAO,SAAK;;IAIZ,QAAQ,yCAUN;CACF"}
|