@coderoftime/fints 0.1.0 → 0.3.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/CHANGELOG.md +519 -1
- package/README.md +138 -40
- package/dist/client.d.ts +49 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +242 -0
- package/dist/client.js.map +1 -0
- package/dist/core/account.d.ts +46 -7
- package/dist/core/account.d.ts.map +1 -1
- package/dist/core/account.js +143 -24
- package/dist/core/account.js.map +1 -1
- package/dist/core/amount.d.ts +15 -4
- package/dist/core/amount.d.ts.map +1 -1
- package/dist/core/amount.js +46 -9
- package/dist/core/amount.js.map +1 -1
- package/dist/core/balance.d.ts +4 -0
- package/dist/core/balance.d.ts.map +1 -1
- package/dist/core/balance.js +11 -5
- package/dist/core/balance.js.map +1 -1
- package/dist/core/bank-info.d.ts +21 -4
- package/dist/core/bank-info.d.ts.map +1 -1
- package/dist/core/bank-info.js +26 -5
- package/dist/core/bank-info.js.map +1 -1
- package/dist/core/client.d.ts +81 -19
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/config.d.ts +40 -20
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +85 -30
- package/dist/core/config.js.map +1 -1
- package/dist/core/errors.d.ts +100 -26
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +136 -53
- package/dist/core/errors.js.map +1 -1
- package/dist/core/feedback.d.ts +11 -1
- package/dist/core/feedback.d.ts.map +1 -1
- package/dist/core/feedback.js +14 -2
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/transaction.d.ts +11 -1
- package/dist/core/transaction.d.ts.map +1 -1
- package/dist/core/transaction.js +21 -4
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/transport.d.ts +48 -6
- package/dist/core/transport.d.ts.map +1 -1
- package/dist/core/transport.js +126 -29
- package/dist/core/transport.js.map +1 -1
- package/dist/formats/camt.d.ts +28 -5
- package/dist/formats/camt.d.ts.map +1 -1
- package/dist/formats/camt.js +132 -50
- package/dist/formats/camt.js.map +1 -1
- package/dist/formats/mt940.d.ts +29 -5
- package/dist/formats/mt940.d.ts.map +1 -1
- package/dist/formats/mt940.js +209 -113
- package/dist/formats/mt940.js.map +1 -1
- package/dist/formats/readers.d.ts +6 -2
- package/dist/formats/readers.d.ts.map +1 -1
- package/dist/formats/readers.js +28 -29
- package/dist/formats/readers.js.map +1 -1
- package/dist/formats/record-budget.d.ts +7 -0
- package/dist/formats/record-budget.d.ts.map +1 -0
- package/dist/formats/record-budget.js +17 -0
- package/dist/formats/record-budget.js.map +1 -0
- package/dist/formats/sepa-purpose.d.ts +9 -0
- package/dist/formats/sepa-purpose.d.ts.map +1 -1
- package/dist/formats/sepa-purpose.js +32 -2
- package/dist/formats/sepa-purpose.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/session/app-approval.d.ts +11 -5
- package/dist/session/app-approval.d.ts.map +1 -1
- package/dist/session/app-approval.js +23 -12
- package/dist/session/app-approval.js.map +1 -1
- package/dist/session/dialog-runner.d.ts +11 -11
- package/dist/session/dialog-runner.d.ts.map +1 -1
- package/dist/session/dialog-runner.js +34 -19
- package/dist/session/dialog-runner.js.map +1 -1
- package/dist/session/login-guard.d.ts +54 -49
- package/dist/session/login-guard.d.ts.map +1 -1
- package/dist/session/login-guard.js +170 -83
- package/dist/session/login-guard.js.map +1 -1
- package/dist/session/sepa-accounts.d.ts +20 -14
- package/dist/session/sepa-accounts.d.ts.map +1 -1
- package/dist/session/sepa-accounts.js +62 -46
- package/dist/session/sepa-accounts.js.map +1 -1
- package/dist/session/session-setup.d.ts +41 -24
- package/dist/session/session-setup.d.ts.map +1 -1
- package/dist/session/session-setup.js +106 -63
- package/dist/session/session-setup.js.map +1 -1
- package/dist/session/session-state.d.ts +10 -6
- package/dist/session/session-state.d.ts.map +1 -1
- package/dist/session/session-state.js +72 -18
- package/dist/session/session-state.js.map +1 -1
- package/dist/session/signed-dialog.d.ts +83 -0
- package/dist/session/signed-dialog.d.ts.map +1 -0
- package/dist/session/signed-dialog.js +185 -0
- package/dist/session/signed-dialog.js.map +1 -0
- package/dist/session/tan-selection.d.ts +26 -18
- package/dist/session/tan-selection.d.ts.map +1 -1
- package/dist/session/tan-selection.js +44 -33
- package/dist/session/tan-selection.js.map +1 -1
- package/dist/session/user-prompts.d.ts +14 -5
- package/dist/session/user-prompts.d.ts.map +1 -1
- package/dist/session/user-prompts.js +53 -18
- package/dist/session/user-prompts.js.map +1 -1
- package/dist/tan/challenge.d.ts +47 -24
- package/dist/tan/challenge.d.ts.map +1 -1
- package/dist/tan/challenge.js +56 -51
- package/dist/tan/challenge.js.map +1 -1
- package/dist/tan/flicker.d.ts +11 -1
- package/dist/tan/flicker.d.ts.map +1 -1
- package/dist/tan/flicker.js +70 -24
- package/dist/tan/flicker.js.map +1 -1
- package/dist/tan/tan-image.d.ts +6 -2
- package/dist/tan/tan-image.d.ts.map +1 -1
- package/dist/tan/tan-image.js +14 -6
- package/dist/tan/tan-image.js.map +1 -1
- package/dist/tan/tan-models.d.ts +14 -2
- package/dist/tan/tan-models.d.ts.map +1 -1
- package/dist/tan/tan-models.js +24 -7
- package/dist/tan/tan-models.js.map +1 -1
- package/dist/util/arguments.d.ts +13 -0
- package/dist/util/arguments.d.ts.map +1 -0
- package/dist/util/arguments.js +40 -0
- package/dist/util/arguments.js.map +1 -0
- package/dist/util/async.d.ts +4 -3
- package/dist/util/async.d.ts.map +1 -1
- package/dist/util/async.js +6 -7
- package/dist/util/async.js.map +1 -1
- package/dist/util/bytes.d.ts +3 -4
- package/dist/util/bytes.d.ts.map +1 -1
- package/dist/util/bytes.js +13 -21
- package/dist/util/bytes.js.map +1 -1
- package/dist/util/call-context.d.ts.map +1 -1
- package/dist/util/call-context.js +3 -2
- package/dist/util/call-context.js.map +1 -1
- package/dist/util/dates.d.ts +6 -20
- package/dist/util/dates.d.ts.map +1 -1
- package/dist/util/dates.js +58 -28
- package/dist/util/dates.js.map +1 -1
- package/dist/util/errors.d.ts +13 -3
- package/dist/util/errors.d.ts.map +1 -1
- package/dist/util/errors.js +19 -6
- package/dist/util/errors.js.map +1 -1
- package/dist/util/immutable-map.d.ts +5 -2
- package/dist/util/immutable-map.d.ts.map +1 -1
- package/dist/util/immutable-map.js +15 -12
- package/dist/util/immutable-map.js.map +1 -1
- package/dist/util/inspect.d.ts +11 -0
- package/dist/util/inspect.d.ts.map +1 -0
- package/dist/util/inspect.js +14 -0
- package/dist/util/inspect.js.map +1 -0
- package/dist/util/json.d.ts +4 -0
- package/dist/util/json.d.ts.map +1 -1
- package/dist/util/json.js +18 -0
- package/dist/util/json.js.map +1 -1
- package/dist/util/text.d.ts +38 -5
- package/dist/util/text.d.ts.map +1 -1
- package/dist/util/text.js +90 -16
- package/dist/util/text.js.map +1 -1
- package/dist/util/xml.d.ts +9 -6
- package/dist/util/xml.d.ts.map +1 -1
- package/dist/util/xml.js +129 -56
- package/dist/util/xml.js.map +1 -1
- package/dist/v3/account-extension.d.ts.map +1 -1
- package/dist/v3/account-extension.js +7 -10
- package/dist/v3/account-extension.js.map +1 -1
- package/dist/v3/bank-connection.d.ts +54 -0
- package/dist/v3/bank-connection.d.ts.map +1 -0
- package/dist/v3/bank-connection.js +118 -0
- package/dist/v3/bank-connection.js.map +1 -0
- package/dist/v3/dialog.d.ts +84 -46
- package/dist/v3/dialog.d.ts.map +1 -1
- package/dist/v3/dialog.js +174 -60
- package/dist/v3/dialog.js.map +1 -1
- package/dist/v3/message.d.ts +32 -11
- package/dist/v3/message.d.ts.map +1 -1
- package/dist/v3/message.js +144 -83
- package/dist/v3/message.js.map +1 -1
- package/dist/v3/parameter-store.d.ts +111 -0
- package/dist/v3/parameter-store.d.ts.map +1 -0
- package/dist/v3/parameter-store.js +197 -0
- package/dist/v3/parameter-store.js.map +1 -0
- package/dist/v3/parameters.d.ts +44 -17
- package/dist/v3/parameters.d.ts.map +1 -1
- package/dist/v3/parameters.js +136 -60
- package/dist/v3/parameters.js.map +1 -1
- package/dist/v3/protocol.d.ts +50 -50
- package/dist/v3/protocol.d.ts.map +1 -1
- package/dist/v3/protocol.js +91 -210
- package/dist/v3/protocol.js.map +1 -1
- package/dist/v3/queries.d.ts +51 -0
- package/dist/v3/queries.d.ts.map +1 -0
- package/dist/v3/queries.js +128 -0
- package/dist/v3/queries.js.map +1 -0
- package/dist/v3/segments.d.ts +43 -19
- package/dist/v3/segments.d.ts.map +1 -1
- package/dist/v3/segments.js +84 -33
- package/dist/v3/segments.js.map +1 -1
- package/dist/v3/syntax.d.ts +68 -13
- package/dist/v3/syntax.d.ts.map +1 -1
- package/dist/v3/syntax.js +183 -102
- package/dist/v3/syntax.js.map +1 -1
- package/package.json +10 -6
- package/src/client.ts +293 -0
- package/src/core/account.ts +153 -24
- package/src/core/amount.ts +45 -10
- package/src/core/balance.ts +12 -5
- package/src/core/bank-info.ts +29 -5
- package/src/core/client.ts +83 -19
- package/src/core/config.ts +95 -35
- package/src/core/errors.ts +148 -54
- package/src/core/feedback.ts +16 -2
- package/src/core/transaction.ts +22 -4
- package/src/core/transport.ts +153 -32
- package/src/formats/camt.ts +153 -45
- package/src/formats/mt940.ts +244 -122
- package/src/formats/readers.ts +28 -31
- package/src/formats/record-budget.ts +18 -0
- package/src/formats/sepa-purpose.ts +29 -2
- package/src/index.ts +4 -2
- package/src/session/app-approval.ts +51 -38
- package/src/session/dialog-runner.ts +61 -31
- package/src/session/login-guard.ts +189 -87
- package/src/session/sepa-accounts.ts +63 -45
- package/src/session/session-setup.ts +105 -68
- package/src/session/session-state.ts +74 -23
- package/src/session/signed-dialog.ts +222 -0
- package/src/session/tan-selection.ts +50 -39
- package/src/session/user-prompts.ts +62 -18
- package/src/tan/challenge.ts +87 -64
- package/src/tan/flicker.ts +72 -23
- package/src/tan/tan-image.ts +15 -6
- package/src/tan/tan-models.ts +26 -7
- package/src/util/arguments.ts +40 -0
- package/src/util/async.ts +10 -9
- package/src/util/bytes.ts +14 -20
- package/src/util/call-context.ts +3 -2
- package/src/util/dates.ts +64 -33
- package/src/util/errors.ts +22 -6
- package/src/util/immutable-map.ts +15 -12
- package/src/util/inspect.ts +14 -0
- package/src/util/json.ts +16 -0
- package/src/util/text.ts +87 -15
- package/src/util/xml.ts +130 -52
- package/src/v3/account-extension.ts +7 -12
- package/src/v3/bank-connection.ts +126 -0
- package/src/v3/dialog.ts +186 -92
- package/src/v3/message.ts +140 -79
- package/src/v3/parameter-store.ts +226 -0
- package/src/v3/parameters.ts +166 -66
- package/src/v3/protocol.ts +103 -253
- package/src/v3/queries.ts +198 -0
- package/src/v3/segments.ts +86 -31
- package/src/v3/syntax.ts +172 -93
- package/dist/session/bank-connection.d.ts +0 -28
- package/dist/session/bank-connection.d.ts.map +0 -1
- package/dist/session/bank-connection.js +0 -48
- package/dist/session/bank-connection.js.map +0 -1
- package/dist/session/parameter-data.d.ts +0 -83
- package/dist/session/parameter-data.d.ts.map +0 -1
- package/dist/session/parameter-data.js +0 -68
- package/dist/session/parameter-data.js.map +0 -1
- package/dist/session/pin-tan-client.d.ts +0 -54
- package/dist/session/pin-tan-client.d.ts.map +0 -1
- package/dist/session/pin-tan-client.js +0 -153
- package/dist/session/pin-tan-client.js.map +0 -1
- package/dist/session/pin-tan-dialog.d.ts +0 -71
- package/dist/session/pin-tan-dialog.d.ts.map +0 -1
- package/dist/session/pin-tan-dialog.js +0 -124
- package/dist/session/pin-tan-dialog.js.map +0 -1
- package/dist/session/protocol.d.ts +0 -209
- package/dist/session/protocol.d.ts.map +0 -1
- package/dist/session/protocol.js +0 -75
- package/dist/session/protocol.js.map +0 -1
- package/dist/session/response-handler.d.ts +0 -48
- package/dist/session/response-handler.d.ts.map +0 -1
- package/dist/session/response-handler.js +0 -121
- package/dist/session/response-handler.js.map +0 -1
- package/dist/v3/client.d.ts +0 -24
- package/dist/v3/client.d.ts.map +0 -1
- package/dist/v3/client.js +0 -16
- package/dist/v3/client.js.map +0 -1
- package/src/session/bank-connection.ts +0 -51
- package/src/session/parameter-data.ts +0 -137
- package/src/session/pin-tan-client.ts +0 -186
- package/src/session/pin-tan-dialog.ts +0 -160
- package/src/session/protocol.ts +0 -311
- package/src/session/response-handler.ts +0 -130
- package/src/v3/client.ts +0 -29
package/dist/formats/mt940.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Amount } from '../core/amount.js';
|
|
2
2
|
import { Transaction, type TransactionStatus } from '../core/transaction.js';
|
|
3
|
+
import { RecordBudget } from './record-budget.js';
|
|
3
4
|
/** One statement from an MT940 or MT942 file, with its balances and transactions. */
|
|
4
5
|
export interface Mt940Statement {
|
|
5
6
|
/** The sender's reference of the statement (field 20). */
|
|
@@ -12,13 +13,22 @@ export interface Mt940Statement {
|
|
|
12
13
|
readonly currency: string | undefined;
|
|
13
14
|
/** The balance at the start of the statement (field 60), negative for a debit. */
|
|
14
15
|
readonly openingBalance: Amount | undefined;
|
|
15
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* The date of `openingBalance`; `undefined` where the bank states none, as `0` or `000000` for the first statement of
|
|
18
|
+
* an account.
|
|
19
|
+
*/
|
|
16
20
|
readonly openingDate: Date | undefined;
|
|
17
21
|
/** The balance at the end of the statement (field 62), negative for a debit. */
|
|
18
22
|
readonly closingBalance: Amount | undefined;
|
|
19
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* The date of `closingBalance`; `undefined` where the bank states none, as `0` or `000000` for the first statement of
|
|
25
|
+
* an account.
|
|
26
|
+
*/
|
|
20
27
|
readonly closingDate: Date | undefined;
|
|
21
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* The transactions of the statement, in the order the bank lists them; they lead from `openingBalance` to
|
|
30
|
+
* `closingBalance` where the statement states these.
|
|
31
|
+
*/
|
|
22
32
|
readonly transactions: readonly Transaction[];
|
|
23
33
|
}
|
|
24
34
|
/** What the MT940 parser takes besides the text. */
|
|
@@ -28,15 +38,29 @@ export interface Mt940Options {
|
|
|
28
38
|
/** The currency of statements that state none in their balances. */
|
|
29
39
|
currency?: string | undefined;
|
|
30
40
|
}
|
|
41
|
+
/** Longest field the parser reads, from its tag to the next one: SWIFT fields have a few hundred characters. */
|
|
42
|
+
export declare const maxFieldLength = 65536;
|
|
31
43
|
/** Parser for SWIFT MT940/MT942 statements, including German structured `:86:` fields. */
|
|
32
44
|
export declare const Mt940: Readonly<{
|
|
33
45
|
/** Parses all transactions; see `parse`. */
|
|
34
46
|
parseTransactions(text: string, options?: Mt940Options): Transaction[];
|
|
35
47
|
/**
|
|
36
|
-
* Parses all statements.
|
|
48
|
+
* Parses all statements. Their lines are separated by line breaks, and by `@@` as well where the first line holds it,
|
|
49
|
+
* as some banks separate them.
|
|
50
|
+
*
|
|
51
|
+
* Throws `FormatError` for text without any field, if a transaction line (`:61:`), a balance or the creation date of
|
|
52
|
+
* an MT942 (`:13D:`) cannot be read or the currency of a transaction is unknown, and for a closing balance dated
|
|
53
|
+
* before the opening one. It does as well for a statement that states only one of its opening and closing balances,
|
|
54
|
+
* one of them, its account, its number or its creation date twice, or transactions that do not lead from the one
|
|
55
|
+
* balance to the other: a line of a purpose that starts like a field, such as `:61:` or `:25:`, would pass for a
|
|
56
|
+
* transaction, the account or a statement of its own otherwise. Text of more than 200,000 statements and
|
|
57
|
+
* transactions, or with a field of more than 65,536 characters, is a `FormatError` as well.
|
|
37
58
|
*
|
|
38
|
-
* Throws `
|
|
59
|
+
* Throws `TypeError` for a `status` other than `booked` and `pending`, `null` included, and for a `currency` that is
|
|
60
|
+
* no string; `null` counts as no currency.
|
|
39
61
|
*/
|
|
40
62
|
parse(text: string, options?: Mt940Options): Mt940Statement[];
|
|
41
63
|
}>;
|
|
64
|
+
/** `Mt940.parse`, which takes each statement and transaction from `budget`, before it builds it. */
|
|
65
|
+
export declare function parseMt940(text: string, options: Mt940Options, budget: RecordBudget): Mt940Statement[];
|
|
42
66
|
//# sourceMappingURL=mt940.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mt940.d.ts","sourceRoot":"","sources":["../../src/formats/mt940.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mt940.d.ts","sourceRoot":"","sources":["../../src/formats/mt940.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAiB,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM5F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,iDAAiD;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;CAC/C;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAID,gHAAgH;AAChH,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,0FAA0F;AAC1F,eAAO,MAAM,KAAK;IAChB,4CAA4C;4BACpB,MAAM,YAAW,YAAY,GAAQ,WAAW,EAAE;IAI1E;;;;;;;;;;;;;;OAcG;gBACS,MAAM,YAAW,YAAY,GAAQ,cAAc,EAAE;EAKjE,CAAC;AAEH,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,cAAc,EAAE,CAkBtG"}
|
package/dist/formats/mt940.js
CHANGED
|
@@ -1,50 +1,111 @@
|
|
|
1
|
-
import { Amount } from '../core/amount.js';
|
|
2
|
-
import { Transaction } from '../core/transaction.js';
|
|
1
|
+
import { addsUpTo, Amount } from '../core/amount.js';
|
|
2
|
+
import { requireStatus, Transaction } from '../core/transaction.js';
|
|
3
|
+
import { optionalString } from '../util/arguments.js';
|
|
3
4
|
import { clampedDate, parseSwiftDate } from '../util/dates.js';
|
|
4
|
-
import { FormatError } from '../util/errors.js';
|
|
5
|
-
import {
|
|
5
|
+
import { fail, FormatError } from '../util/errors.js';
|
|
6
|
+
import { frozenWithInspect } from '../util/inspect.js';
|
|
7
|
+
import { counted, maskedId, nonBlank, trimBlanks } from '../util/text.js';
|
|
8
|
+
import { RecordBudget } from './record-budget.js';
|
|
6
9
|
import { providedReference, SepaPurpose } from './sepa-purpose.js';
|
|
7
10
|
const tagPattern = /^:(\d{2}[A-Z]?):/gm;
|
|
8
|
-
|
|
9
|
-
const
|
|
11
|
+
/** Longest field the parser reads, from its tag to the next one: SWIFT fields have a few hundred characters. */
|
|
12
|
+
export const maxFieldLength = 65_536;
|
|
10
13
|
/** Parser for SWIFT MT940/MT942 statements, including German structured `:86:` fields. */
|
|
11
14
|
export const Mt940 = Object.freeze({
|
|
12
15
|
/** Parses all transactions; see `parse`. */
|
|
13
16
|
parseTransactions(text, options = {}) {
|
|
14
|
-
return Mt940.parse(text, options).flatMap((s) =>
|
|
17
|
+
return Mt940.parse(text, options).flatMap((s) => s.transactions);
|
|
15
18
|
},
|
|
16
19
|
/**
|
|
17
|
-
* Parses all statements.
|
|
20
|
+
* Parses all statements. Their lines are separated by line breaks, and by `@@` as well where the first line holds it,
|
|
21
|
+
* as some banks separate them.
|
|
18
22
|
*
|
|
19
|
-
* Throws `FormatError` if a transaction line (`:61:`)
|
|
23
|
+
* Throws `FormatError` for text without any field, if a transaction line (`:61:`), a balance or the creation date of
|
|
24
|
+
* an MT942 (`:13D:`) cannot be read or the currency of a transaction is unknown, and for a closing balance dated
|
|
25
|
+
* before the opening one. It does as well for a statement that states only one of its opening and closing balances,
|
|
26
|
+
* one of them, its account, its number or its creation date twice, or transactions that do not lead from the one
|
|
27
|
+
* balance to the other: a line of a purpose that starts like a field, such as `:61:` or `:25:`, would pass for a
|
|
28
|
+
* transaction, the account or a statement of its own otherwise. Text of more than 200,000 statements and
|
|
29
|
+
* transactions, or with a field of more than 65,536 characters, is a `FormatError` as well.
|
|
30
|
+
*
|
|
31
|
+
* Throws `TypeError` for a `status` other than `booked` and `pending`, `null` included, and for a `currency` that is
|
|
32
|
+
* no string; `null` counts as no currency.
|
|
20
33
|
*/
|
|
21
34
|
parse(text, options = {}) {
|
|
22
|
-
const status = options.status
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
const normalized = lines.includes('\n') ? lines : lines.replace(/@@/g, '\n');
|
|
26
|
-
const tags = [...normalized.matchAll(tagPattern)];
|
|
27
|
-
const statements = [];
|
|
28
|
-
let current;
|
|
29
|
-
tags.forEach((tag, i) => {
|
|
30
|
-
const end = i + 1 < tags.length ? tags[i + 1].index : normalized.length;
|
|
31
|
-
const value = normalized
|
|
32
|
-
.substring(tag.index + tag[0].length, end)
|
|
33
|
-
.replace(statementEnd, '')
|
|
34
|
-
.replace(trailingNewlines, '');
|
|
35
|
-
if (tag[1] === '20' || current === undefined) {
|
|
36
|
-
if (current !== undefined)
|
|
37
|
-
statements.push(current.build());
|
|
38
|
-
current = new StatementBuilder(status, options.currency);
|
|
39
|
-
}
|
|
40
|
-
current.add(tag[1], value);
|
|
41
|
-
});
|
|
42
|
-
if (current !== undefined)
|
|
43
|
-
statements.push(current.build());
|
|
44
|
-
return statements;
|
|
35
|
+
const status = options.status === undefined ? undefined : requireStatus(options.status);
|
|
36
|
+
const currency = optionalString(options.currency, 'currency');
|
|
37
|
+
return parseMt940(text, { status, currency }, new RecordBudget());
|
|
45
38
|
},
|
|
46
39
|
});
|
|
47
|
-
|
|
40
|
+
/** `Mt940.parse`, which takes each statement and transaction from `budget`, before it builds it. */
|
|
41
|
+
export function parseMt940(text, options, budget) {
|
|
42
|
+
const status = options.status ?? 'booked';
|
|
43
|
+
const normalized = withLineFeeds(text);
|
|
44
|
+
const statements = [];
|
|
45
|
+
let current;
|
|
46
|
+
for (const [tag, value] of taggedParts(normalized, tagPattern)) {
|
|
47
|
+
if (value.length > maxFieldLength)
|
|
48
|
+
throw new FormatError(`MT940 field :${tag}: too long`);
|
|
49
|
+
if (tag === '20' || current === undefined) {
|
|
50
|
+
if (current !== undefined)
|
|
51
|
+
statements.push(current.build());
|
|
52
|
+
budget.take();
|
|
53
|
+
current = new StatementBuilder(status, options.currency);
|
|
54
|
+
}
|
|
55
|
+
if (tag === '61')
|
|
56
|
+
budget.take();
|
|
57
|
+
current.add(tag, fieldValue(value));
|
|
58
|
+
}
|
|
59
|
+
if (current !== undefined)
|
|
60
|
+
statements.push(current.build());
|
|
61
|
+
else if (normalized.trim() !== '')
|
|
62
|
+
throw new FormatError('MT940 data without fields');
|
|
63
|
+
return statements;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The parts of `text` that the matches of `tag` start, each the first group of its match and the text up to the next
|
|
67
|
+
* match: the fields of a statement, or the subfields of a `:86:`. One by one: text of a few megabytes holds millions of
|
|
68
|
+
* them. A pattern that matched the text up to the next tag as well would run out of backtracking stack on a part of a
|
|
69
|
+
* few million characters.
|
|
70
|
+
*/
|
|
71
|
+
function* taggedParts(text, tag) {
|
|
72
|
+
let current;
|
|
73
|
+
let start = 0;
|
|
74
|
+
for (const match of text.matchAll(tag)) {
|
|
75
|
+
if (current !== undefined)
|
|
76
|
+
yield [current, text.substring(start, match.index)];
|
|
77
|
+
current = match[1];
|
|
78
|
+
start = match.index + match[0].length;
|
|
79
|
+
}
|
|
80
|
+
if (current !== undefined)
|
|
81
|
+
yield [current, text.substring(start)];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* `text` with line feeds between its lines, without the blanks and the byte order mark it may start with, which would
|
|
85
|
+
* hide its first tag. Some banks separate the lines with `@@`, and may still break the line between statements or at
|
|
86
|
+
* the ends. So `@@` separates lines where the first line holds it, which the bank writes; in other text, `@@` may be
|
|
87
|
+
* part of a purpose, which the payer writes.
|
|
88
|
+
*/
|
|
89
|
+
function withLineFeeds(text) {
|
|
90
|
+
const lines = trimBlanks(text.replace(/\r\n?/g, '\n'), { end: false });
|
|
91
|
+
return lines.split('\n', 1)[0].includes('@@') ? lines.replace(/@@/g, '\n') : lines;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The value of a field in `text`, which runs from its tag to the next one: without the statement end (`-`) and the line
|
|
95
|
+
* feeds at its end. Other blanks there stay: the subfield of a `:86:` that ends it may precede others in the purpose.
|
|
96
|
+
*
|
|
97
|
+
* Trimmed without a pattern such as `/\n+$/`, which takes quadratic time on a long run of line breaks.
|
|
98
|
+
*/
|
|
99
|
+
function fieldValue(text) {
|
|
100
|
+
const trimmed = text.trimEnd();
|
|
101
|
+
let end = trimmed.endsWith('\n-') ? trimmed.length - 2 : text.length;
|
|
102
|
+
while (end > 0 && text.charCodeAt(end - 1) === 0x0a)
|
|
103
|
+
end--;
|
|
104
|
+
return text.substring(0, end);
|
|
105
|
+
}
|
|
106
|
+
/** The date is `0` or `000000` for the first statement of an account. */
|
|
107
|
+
const balancePattern = /^([CD])(\d{6}|0)([A-Z]{3})(\d+,\d*)/;
|
|
108
|
+
const dateTimePattern = /^(\d{6})\d{4}/;
|
|
48
109
|
const currencyPrefix = /^([A-Z]{3})/;
|
|
49
110
|
class StatementBuilder {
|
|
50
111
|
status;
|
|
@@ -57,6 +118,8 @@ class StatementBuilder {
|
|
|
57
118
|
openingDate;
|
|
58
119
|
closing;
|
|
59
120
|
closingDate;
|
|
121
|
+
/** The day an MT942 was created (field 13D). */
|
|
122
|
+
creationDate;
|
|
60
123
|
transactions = [];
|
|
61
124
|
/**
|
|
62
125
|
* The tag added last: a `:86:` right after a `:61:` details the transaction, anywhere else it informs the account
|
|
@@ -72,35 +135,53 @@ class StatementBuilder {
|
|
|
72
135
|
add(tag, value) {
|
|
73
136
|
switch (tag) {
|
|
74
137
|
case '20':
|
|
75
|
-
this.reference = value
|
|
138
|
+
this.reference = trimBlanks(value);
|
|
76
139
|
break;
|
|
77
140
|
case '25':
|
|
78
|
-
this.accountId
|
|
141
|
+
if (this.accountId !== undefined)
|
|
142
|
+
throw new FormatError('MT940 statement with two accounts', this.reference);
|
|
143
|
+
this.accountId = trimBlanks(value);
|
|
79
144
|
break;
|
|
80
145
|
case '28C':
|
|
81
146
|
case '28':
|
|
82
|
-
this.statementNumber
|
|
147
|
+
if (this.statementNumber !== undefined) {
|
|
148
|
+
throw new FormatError('MT940 statement with two statement numbers', this.reference);
|
|
149
|
+
}
|
|
150
|
+
this.statementNumber = trimBlanks(value);
|
|
151
|
+
break;
|
|
152
|
+
case '13D':
|
|
153
|
+
case '13': {
|
|
154
|
+
if (this.creationDate !== undefined) {
|
|
155
|
+
throw new FormatError('MT940 statement with two creation dates', this.reference);
|
|
156
|
+
}
|
|
157
|
+
const m = dateTimePattern.exec(trimBlanks(value));
|
|
158
|
+
this.creationDate = (m && parseSwiftDate(m[1])) ?? fail('Invalid MT940 creation date', value);
|
|
83
159
|
break;
|
|
160
|
+
}
|
|
84
161
|
case '60F':
|
|
85
162
|
case '60M': {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
[this.opening, this.openingDate] = balance;
|
|
89
|
-
this.currency ??= balance[0].currency;
|
|
163
|
+
if (this.opening !== undefined) {
|
|
164
|
+
throw new FormatError('MT940 statement with two opening balances', this.reference);
|
|
90
165
|
}
|
|
166
|
+
const [balance, date] = parseBalance(value);
|
|
167
|
+
this.opening = balance;
|
|
168
|
+
this.openingDate = date;
|
|
169
|
+
this.currency ??= balance.currency;
|
|
91
170
|
break;
|
|
92
171
|
}
|
|
93
172
|
case '62F':
|
|
94
173
|
case '62M': {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
[this.closing, this.closingDate] = balance;
|
|
98
|
-
this.currency ??= balance[0].currency;
|
|
174
|
+
if (this.closing !== undefined) {
|
|
175
|
+
throw new FormatError('MT940 statement with two closing balances', this.reference);
|
|
99
176
|
}
|
|
177
|
+
const [balance, date] = parseBalance(value);
|
|
178
|
+
this.closing = balance;
|
|
179
|
+
this.closingDate = date;
|
|
180
|
+
this.currency ??= balance.currency;
|
|
100
181
|
break;
|
|
101
182
|
}
|
|
102
183
|
case '34F':
|
|
103
|
-
this.currency ??= currencyPrefix.exec(value
|
|
184
|
+
this.currency ??= currencyPrefix.exec(trimBlanks(value))?.[1];
|
|
104
185
|
break;
|
|
105
186
|
case '61':
|
|
106
187
|
this.transactions.push(new TransactionLines(value));
|
|
@@ -117,7 +198,14 @@ class StatementBuilder {
|
|
|
117
198
|
if (statementCurrency === undefined && this.transactions.length > 0) {
|
|
118
199
|
throw new FormatError('MT940 statement without currency', this.reference);
|
|
119
200
|
}
|
|
120
|
-
|
|
201
|
+
const { openingDate, closingDate } = this;
|
|
202
|
+
if (openingDate && closingDate && closingDate.getTime() < openingDate.getTime()) {
|
|
203
|
+
throw new FormatError('MT940 closing balance dated before the opening balance', this.reference);
|
|
204
|
+
}
|
|
205
|
+
const period = openingDate && closingDate ? [openingDate, closingDate] : undefined;
|
|
206
|
+
const transactions = this.transactions.map((t) => t.toTransaction(statementCurrency, this.status, period, this.creationDate));
|
|
207
|
+
this.checkBalances(transactions);
|
|
208
|
+
return frozenWithInspect({
|
|
121
209
|
reference: this.reference,
|
|
122
210
|
accountId: this.accountId,
|
|
123
211
|
statementNumber: this.statementNumber,
|
|
@@ -126,18 +214,31 @@ class StatementBuilder {
|
|
|
126
214
|
openingDate: this.openingDate,
|
|
127
215
|
closingBalance: this.closing,
|
|
128
216
|
closingDate: this.closingDate,
|
|
129
|
-
transactions: Object.freeze(
|
|
130
|
-
});
|
|
217
|
+
transactions: Object.freeze(transactions),
|
|
218
|
+
}, (s) => `Mt940Statement(${maskedId(s.accountId ?? '')}, ${counted(s.transactions.length, 'transaction')})`);
|
|
219
|
+
}
|
|
220
|
+
/** Checks that the statement states both balances or neither, and that its `transactions` lead from one to the other. */
|
|
221
|
+
checkBalances(transactions) {
|
|
222
|
+
const { opening, closing } = this;
|
|
223
|
+
if (opening === undefined && closing === undefined)
|
|
224
|
+
return;
|
|
225
|
+
if (opening === undefined || closing === undefined) {
|
|
226
|
+
throw new FormatError('MT940 statement with only one of its balances', this.reference);
|
|
227
|
+
}
|
|
228
|
+
if (opening.currency !== this.currency || closing.currency !== this.currency) {
|
|
229
|
+
throw new FormatError('MT940 balances in another currency than the statement', this.reference);
|
|
230
|
+
}
|
|
231
|
+
if (!addsUpTo([opening, ...transactions.map((t) => t.amount)], closing)) {
|
|
232
|
+
throw new FormatError('MT940 transactions do not add up to the closing balance', this.reference);
|
|
233
|
+
}
|
|
131
234
|
}
|
|
132
235
|
}
|
|
133
236
|
function parseBalance(value) {
|
|
134
|
-
const m = balancePattern.exec(value
|
|
237
|
+
const m = balancePattern.exec(trimBlanks(value));
|
|
135
238
|
if (!m)
|
|
136
|
-
|
|
239
|
+
throw new FormatError('Unreadable MT940 balance', value);
|
|
137
240
|
const amount = Amount.parseDecimal(m[4], m[3]);
|
|
138
|
-
const date = parseSwiftDate(m[2]);
|
|
139
|
-
if (date === undefined)
|
|
140
|
-
throw new FormatError('Invalid balance date', value);
|
|
241
|
+
const date = Number(m[2]) === 0 ? undefined : (parseSwiftDate(m[2]) ?? fail('Invalid balance date', value));
|
|
141
242
|
return [m[1] === 'D' ? amount.negate() : amount, date];
|
|
142
243
|
}
|
|
143
244
|
/**
|
|
@@ -145,6 +246,9 @@ function parseBalance(value) {
|
|
|
145
246
|
* reference, optional bank reference and supplementary details.
|
|
146
247
|
*/
|
|
147
248
|
const line61 = /^(\d{6})(\d{4})?(RC|RD|C|D)([A-Z])?(\d+,\d*)([NFS][A-Z0-9]{3})([^\n]*?)(?:\/\/([^\n]*))?(?:\n([\s\S]*))?$/;
|
|
249
|
+
function spanning(a, b) {
|
|
250
|
+
return a.getTime() <= b.getTime() ? [a, b] : [b, a];
|
|
251
|
+
}
|
|
148
252
|
/** The `:61:` line of a transaction and its `:86:` details. */
|
|
149
253
|
class TransactionLines {
|
|
150
254
|
line;
|
|
@@ -152,28 +256,27 @@ class TransactionLines {
|
|
|
152
256
|
constructor(line) {
|
|
153
257
|
this.line = line;
|
|
154
258
|
}
|
|
155
|
-
toTransaction(currency, status) {
|
|
156
|
-
const m = line61.exec(this.line
|
|
259
|
+
toTransaction(currency, status, period, created) {
|
|
260
|
+
const m = line61.exec(trimBlanks(this.line));
|
|
157
261
|
const valueDate = m ? parseSwiftDate(m[1]) : undefined;
|
|
158
262
|
if (!m || valueDate === undefined)
|
|
159
263
|
throw new FormatError('Unreadable MT940 transaction line (:61:)', this.line);
|
|
160
264
|
const mark = m[3];
|
|
161
265
|
const amount = Amount.parseDecimal(m[5], currency);
|
|
162
266
|
const debit = mark === 'D' || mark === 'RC';
|
|
163
|
-
const customerReference = m[7]?.trim();
|
|
164
|
-
const bankReference = m[8]?.trim();
|
|
165
267
|
const d = Details.parse(this.details);
|
|
268
|
+
const reference = nonBlank(m[7]);
|
|
269
|
+
// `KREF+` stands for the customer reference that :86: states.
|
|
270
|
+
const customerReference = reference === 'KREF+' ? d.sepa.get('KREF') : reference;
|
|
166
271
|
return new Transaction({
|
|
167
272
|
status,
|
|
168
|
-
bookingDate: this.bookingDate(m[2], valueDate),
|
|
273
|
+
bookingDate: this.bookingDate(m[2], valueDate, period ?? spanning(valueDate, created ?? valueDate)),
|
|
169
274
|
valueDate,
|
|
170
275
|
amount: debit ? amount.negate() : amount,
|
|
171
276
|
isReversal: mark.startsWith('R'),
|
|
172
277
|
transactionTypeId: m[6],
|
|
173
|
-
customerReference: customerReference ===
|
|
174
|
-
|
|
175
|
-
: customerReference,
|
|
176
|
-
bankReference: bankReference === undefined || bankReference === '' ? undefined : bankReference,
|
|
278
|
+
customerReference: customerReference === 'NONREF' ? undefined : customerReference,
|
|
279
|
+
bankReference: nonBlank(m[8]),
|
|
177
280
|
transactionCode: d.transactionCode,
|
|
178
281
|
bookingText: d.bookingText,
|
|
179
282
|
primaNota: d.primaNota,
|
|
@@ -191,35 +294,40 @@ class TransactionLines {
|
|
|
191
294
|
purposeCodes: d.sepa,
|
|
192
295
|
});
|
|
193
296
|
}
|
|
194
|
-
/**
|
|
195
|
-
|
|
297
|
+
/**
|
|
298
|
+
* The booking date `MMDD`, in the year that places it within `period`, or else closest to it; of several such years,
|
|
299
|
+
* the one closest to `valueDate`. The value date alone misleads: banks book refunds and corrections with the value
|
|
300
|
+
* date of the original booking, up to 13 months before.
|
|
301
|
+
*/
|
|
302
|
+
bookingDate(mmdd, valueDate, [first, last]) {
|
|
196
303
|
if (mmdd === undefined)
|
|
197
304
|
return undefined;
|
|
198
305
|
const month = Number(mmdd.substring(0, 2));
|
|
199
306
|
const day = Number(mmdd.substring(2, 4));
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
307
|
+
const outside = (date) => Math.max(first.getTime() - date.getTime(), date.getTime() - last.getTime(), 0);
|
|
308
|
+
const fromValueDate = (date) => Math.abs(date.getTime() - valueDate.getTime());
|
|
309
|
+
// The best year lies next to one of these, however long the period.
|
|
310
|
+
const years = new Set([first, valueDate, last].flatMap((d) => [d.getFullYear() - 1, d.getFullYear(), d.getFullYear() + 1]));
|
|
311
|
+
let best;
|
|
312
|
+
for (const year of years) {
|
|
313
|
+
const date = clampedDate(year, month, day);
|
|
314
|
+
if (date === undefined)
|
|
315
|
+
throw new FormatError('Invalid booking date', this.line);
|
|
316
|
+
if (best === undefined || (outside(date) - outside(best) || fromValueDate(date) - fromValueDate(best)) < 0) {
|
|
317
|
+
best = date;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return best;
|
|
209
321
|
}
|
|
210
322
|
}
|
|
211
323
|
/**
|
|
212
|
-
* Three-digit business transaction code (GVC), then the first subfield:
|
|
213
|
-
*
|
|
324
|
+
* Three-digit business transaction code (GVC), then the first subfield: `?` and its two-digit number. Text that merely
|
|
325
|
+
* starts with three digits, such as `100 Euro` or `100,00 EUR`, is free text.
|
|
214
326
|
*/
|
|
215
|
-
const structuredPattern =
|
|
327
|
+
const structuredPattern = /^\d{3}\?\d{2}/;
|
|
328
|
+
const subfieldTag = /\?(\d{2})/g;
|
|
216
329
|
const ibanPattern = /^[A-Z]{2}\d{2}[A-Z0-9]+$/;
|
|
217
330
|
const bicPattern = /^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$/;
|
|
218
|
-
/** Subfield pattern for a separator: the separator, a two-digit key, then everything up to the next subfield. */
|
|
219
|
-
function subfieldPattern(separator) {
|
|
220
|
-
const s = escapeRegExp(separator);
|
|
221
|
-
return new RegExp(`${s}(\\d{2})((?:(?!${s}\\d{2})[\\s\\S])*)`, 'g');
|
|
222
|
-
}
|
|
223
331
|
/** The German structured `:86:` field: a business transaction code and `?nn` subfields. */
|
|
224
332
|
class Details {
|
|
225
333
|
transactionCode;
|
|
@@ -237,61 +345,49 @@ class Details {
|
|
|
237
345
|
if (raw === undefined)
|
|
238
346
|
return d;
|
|
239
347
|
const text = raw.replace(/\n/g, '');
|
|
240
|
-
|
|
241
|
-
if (!structured) {
|
|
348
|
+
if (!structuredPattern.test(text)) {
|
|
242
349
|
// Free text, whose lines are separate phrases; the purpose and its keywords are read from the same text.
|
|
243
|
-
const free = raw.replace(/\n/g, ' ')
|
|
350
|
+
const free = trimBlanks(raw.replace(/\n/g, ' '));
|
|
244
351
|
d.sepa = SepaPurpose.parse(free);
|
|
245
|
-
d.purpose = d.sepa.get('SVWZ') ?? (free
|
|
352
|
+
d.purpose = d.sepa.get('SVWZ') ?? nonBlank(free);
|
|
246
353
|
return d;
|
|
247
354
|
}
|
|
248
|
-
d.transactionCode =
|
|
249
|
-
const subfields = Details.subfields(text.substring(3)
|
|
250
|
-
const subfield = (key) =>
|
|
251
|
-
const value = subfields.get(key)?.trim();
|
|
252
|
-
return value === undefined || value === '' ? undefined : value;
|
|
253
|
-
};
|
|
355
|
+
d.transactionCode = text.substring(0, 3);
|
|
356
|
+
const subfields = Details.subfields(text.substring(3));
|
|
357
|
+
const subfield = (key) => nonBlank(subfields.get(key));
|
|
254
358
|
// Subfields continue each other: they are joined keeping the spaces at their boundaries.
|
|
255
359
|
const parts = (keys) => keys.map((k) => subfields.get(k)).filter((v) => v !== undefined);
|
|
256
360
|
d.bookingText = subfield(0);
|
|
257
361
|
d.primaNota = subfield(10);
|
|
258
362
|
const purposeParts = parts([20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 60, 61, 62, 63]);
|
|
259
|
-
const purpose = purposeParts.join('').trim();
|
|
260
363
|
d.sepa = SepaPurpose.parseParts(purposeParts);
|
|
261
|
-
d.purpose = d.sepa.get('SVWZ') ?? (
|
|
262
|
-
|
|
263
|
-
d.name = name === '' ? undefined : name;
|
|
364
|
+
d.purpose = d.sepa.get('SVWZ') ?? nonBlank(purposeParts.join(''));
|
|
365
|
+
d.name = nonBlank(parts([32, 33]).join(''));
|
|
264
366
|
d.readCounterpartyAccount(subfield(30), subfield(31));
|
|
265
|
-
d.iban ??= d.sepa.get('IBAN');
|
|
266
|
-
d.bic ??= d.sepa.get('BIC');
|
|
267
367
|
return d;
|
|
268
368
|
}
|
|
269
369
|
/** The text of each subfield (`?nn` and what follows), by its number; a subfield that appears twice is joined. */
|
|
270
|
-
static subfields(text
|
|
370
|
+
static subfields(text) {
|
|
271
371
|
const subfields = new Map();
|
|
272
|
-
for (const
|
|
273
|
-
const key = Number(
|
|
274
|
-
subfields.set(key, (subfields.get(key) ?? '') +
|
|
372
|
+
for (const [tag, value] of taggedParts(text, subfieldTag)) {
|
|
373
|
+
const key = Number(tag);
|
|
374
|
+
subfields.set(key, (subfields.get(key) ?? '') + value);
|
|
275
375
|
}
|
|
276
376
|
return subfields;
|
|
277
377
|
}
|
|
278
378
|
/**
|
|
279
|
-
* Takes the counterparty's account from subfields 30 (bank) and 31 (account):
|
|
280
|
-
*
|
|
379
|
+
* Takes the counterparty's account from subfields 30 (bank) and 31 (account): a BIC, or else a bank code, and an IBAN,
|
|
380
|
+
* or else an account number.
|
|
281
381
|
*/
|
|
282
382
|
readCounterpartyAccount(bank, account) {
|
|
283
|
-
if (
|
|
284
|
-
this.iban = account;
|
|
285
|
-
this.bic = bank;
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
this.accountNumber = account;
|
|
289
|
-
if (bank !== undefined && bicPattern.test(bank)) {
|
|
383
|
+
if (bank !== undefined && bicPattern.test(bank))
|
|
290
384
|
this.bic = bank;
|
|
291
|
-
|
|
292
|
-
else {
|
|
385
|
+
else
|
|
293
386
|
this.bankCode = bank;
|
|
294
|
-
|
|
387
|
+
if (account !== undefined && ibanPattern.test(account))
|
|
388
|
+
this.iban = account;
|
|
389
|
+
else
|
|
390
|
+
this.accountNumber = account;
|
|
295
391
|
}
|
|
296
392
|
}
|
|
297
393
|
//# sourceMappingURL=mt940.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mt940.js","sourceRoot":"","sources":["../../src/formats/mt940.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mt940.js","sourceRoot":"","sources":["../../src/formats/mt940.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,13 @@ import type { Transaction } from '../core/transaction.js';
|
|
|
3
3
|
* The transactions in MT940 data: the `booked` parts joined, since a statement may continue on the next page, then the
|
|
4
4
|
* `pending` ones (MT942).
|
|
5
5
|
*
|
|
6
|
-
* `currency` applies to statements that do not state one; throws `FormatError` if both are missing
|
|
6
|
+
* `currency` applies to statements that do not state one; throws `FormatError` if both are missing, and for more than
|
|
7
|
+
* 200,000 statements and transactions in all.
|
|
7
8
|
*/
|
|
8
9
|
export declare function mt940Transactions(booked: readonly Uint8Array[], pending: readonly Uint8Array[], currency: string | undefined): Transaction[];
|
|
9
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* The transactions in camt documents; each document stands on its own. Throws `FormatError` for more than 200,000
|
|
12
|
+
* statements and transactions in all.
|
|
13
|
+
*/
|
|
10
14
|
export declare function camtTransactions(booked: readonly Uint8Array[], pending: readonly Uint8Array[]): Transaction[];
|
|
11
15
|
//# sourceMappingURL=readers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/formats/readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D
|
|
1
|
+
{"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/formats/readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,WAAW,EAAE,CAMf;AAmBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,CAM7G"}
|