e-arveldaja-mcp 0.32.1 → 0.32.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/.claude/commands/import-wise.md +1 -0
- package/.claude/commands/reconcile-bank.md +25 -0
- package/CHANGELOG.md +26 -0
- package/CLAUDE.md +8 -0
- package/dist/bank-posting-duplicate-guard.d.ts +5 -1
- package/dist/bank-posting-duplicate-guard.d.ts.map +1 -1
- package/dist/bank-posting-duplicate-guard.js.map +1 -1
- package/dist/banking/reconciliation/executor.d.ts.map +1 -1
- package/dist/banking/reconciliation/executor.js +39 -7
- package/dist/banking/reconciliation/executor.js.map +1 -1
- package/dist/banking/reconciliation/inter-account-matcher.d.ts +9 -1
- package/dist/banking/reconciliation/inter-account-matcher.d.ts.map +1 -1
- package/dist/banking/reconciliation/inter-account-matcher.js +25 -2
- package/dist/banking/reconciliation/inter-account-matcher.js.map +1 -1
- package/dist/banking/reconciliation/presenter.d.ts +137 -15
- package/dist/banking/reconciliation/presenter.d.ts.map +1 -1
- package/dist/banking/reconciliation/presenter.js.map +1 -1
- package/dist/banking/reconciliation/types.d.ts +20 -6
- package/dist/banking/reconciliation/types.d.ts.map +1 -1
- package/dist/camt/duplicate-identity.d.ts +5 -5
- package/dist/camt/duplicate-identity.d.ts.map +1 -1
- package/dist/camt/duplicate-identity.js.map +1 -1
- package/dist/camt/iban-omission.js +3 -3
- package/dist/camt/iban-omission.js.map +1 -1
- package/dist/camt/journal-coverage.d.ts.map +1 -1
- package/dist/camt/journal-coverage.js +3 -1
- package/dist/camt/journal-coverage.js.map +1 -1
- package/dist/camt/marker-render-v1.d.ts +3 -3
- package/dist/camt/presenter.d.ts +150 -8
- package/dist/camt/presenter.d.ts.map +1 -1
- package/dist/camt/presenter.js.map +1 -1
- package/dist/camt/types.d.ts +2 -0
- package/dist/camt/types.d.ts.map +1 -1
- package/dist/plan-tools.d.ts +45 -0
- package/dist/plan-tools.d.ts.map +1 -1
- package/dist/plan-tools.js.map +1 -1
- package/dist/receipts/classification-operations.d.ts.map +1 -1
- package/dist/receipts/classification-operations.js +13 -0
- package/dist/receipts/classification-operations.js.map +1 -1
- package/dist/resolution/bank-account-resolution.d.ts.map +1 -1
- package/dist/resolution/bank-account-resolution.js +2 -1
- package/dist/resolution/bank-account-resolution.js.map +1 -1
- package/dist/tools/analyze-unconfirmed.d.ts +38 -0
- package/dist/tools/analyze-unconfirmed.d.ts.map +1 -1
- package/dist/tools/analyze-unconfirmed.js +21 -2
- package/dist/tools/analyze-unconfirmed.js.map +1 -1
- package/dist/tools/bank-reconciliation.d.ts +16 -0
- package/dist/tools/bank-reconciliation.d.ts.map +1 -1
- package/dist/tools/bank-reconciliation.js.map +1 -1
- package/dist/tools/camt-import.d.ts +26 -0
- package/dist/tools/camt-import.d.ts.map +1 -1
- package/dist/tools/camt-import.js.map +1 -1
- package/dist/tools/inter-account-utils.d.ts +6 -0
- package/dist/tools/inter-account-utils.d.ts.map +1 -1
- package/dist/tools/inter-account-utils.js +7 -2
- package/dist/tools/inter-account-utils.js.map +1 -1
- package/dist/tools/pdf-workflow.d.ts +165 -4
- package/dist/tools/pdf-workflow.d.ts.map +1 -1
- package/dist/tools/pdf-workflow.js.map +1 -1
- package/dist/types/api.d.ts +2 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/wise/counterpart.d.ts.map +1 -1
- package/dist/wise/counterpart.js +3 -0
- package/dist/wise/counterpart.js.map +1 -1
- package/dist/wise/executor.js +2 -2
- package/dist/wise/executor.js.map +1 -1
- package/dist/wise/presenter.d.ts +100 -3
- package/dist/wise/presenter.d.ts.map +1 -1
- package/dist/wise/presenter.js.map +1 -1
- package/dist/wise/projection.d.ts +23 -2
- package/dist/wise/projection.d.ts.map +1 -1
- package/dist/wise/projection.js +110 -11
- package/dist/wise/projection.js.map +1 -1
- package/dist/wise/types.d.ts +5 -2
- package/dist/wise/types.d.ts.map +1 -1
- package/dist/workflow-response.d.ts +14 -4
- package/dist/workflow-response.d.ts.map +1 -1
- package/dist/workflow-response.js.map +1 -1
- package/package.json +9 -7
- package/server.json +2 -2
- package/workflows/import-wise.md +1 -0
- package/workflows/reconcile-bank.md +5 -0
|
@@ -124,6 +124,7 @@ Only the last two are releasable (Step 3, acknowledgement re-preview); the compa
|
|
|
124
124
|
**Automatic matches.** Some rows are skipped automatically, and there is no flag to turn this off. Their skip reason names the stored transaction or journal (in `skipped_details`, read the per-row `records` for the ids):
|
|
125
125
|
- `wise_untagged_ledger_unique`: a confirmed transaction without a `WISE:` tag is the only stored row of this movement on this Wise account.
|
|
126
126
|
- `wise_transfer_journal_unique_legacy`: an inter-account journal is the only same-amount journal within one day and books exactly this transfer.
|
|
127
|
+
- Exact-label journal: a payment that is not an own transfer (a card payment, or a transfer to a third party such as a loan or a cash withdrawal) whose single registered journal is labelled with its exact Wise ID and books its amount on the Wise account in its direction. It is reported as already journalized ("is labelled with this Wise ID"), needs no counterpart account, and execute re-checks that journal. If the journal books the gross amount and the row has a separate fee, the fee leg is still imported, but stays held while the transfer's counterpart is undetermined.
|
|
127
128
|
- "Fee already journalized": that journal books the transfer net of the fee, so the fee row is not created either.
|
|
128
129
|
|
|
129
130
|
Do not report these as plain duplicates. Tell the owner which Wise IDs were skipped this way and the transaction or journal ID each one matched. If the owner says one is a different movement, the undo is to correct or delete that stored transaction or journal (after approval) and run the preview again.
|
|
@@ -216,6 +216,31 @@ Capability condition for `guided`: inspect the connected MCP server's advertised
|
|
|
216
216
|
- `summary.next_action` is the ready-to-send execute call (`mode: "execute_inter_account"` with the `plan_handle` and the dry run's `max_date_gap` / `target_accounts_dimensions_id`); run it only after approval.
|
|
217
217
|
<!-- E_ARVELDAJA_CAPABILITY_CONDITION_END:guided -->
|
|
218
218
|
- Ambiguous transfers (including `direction_unresolved`) are never auto-confirmed — present them for a decision.
|
|
219
|
+
- Transfers needing review (<!-- E_ARVELDAJA_CAPABILITY_CONDITION_START:standard -->
|
|
220
|
+
Capability condition for `standard`: inspect the connected MCP server's advertised tool list before this section. Run this section only when every named tool is advertised: `confirm_transaction`. Otherwise skip this section and continue with the surrounding workflow. Never call a missing tool to probe capability.
|
|
221
|
+
|
|
222
|
+
`result.ambiguous_refless`
|
|
223
|
+
<!-- E_ARVELDAJA_CAPABILITY_CONDITION_END:standard --><!-- E_ARVELDAJA_CAPABILITY_CONDITION_START:guided -->
|
|
224
|
+
Capability condition for `guided`: inspect the connected MCP server's advertised tool list before this section. Run this section only when every named tool is advertised: `reconcile_bank_transactions`, and none of these is advertised: `confirm_transaction`. Otherwise skip this section and continue with the surrounding workflow. Never call a missing tool to probe capability.
|
|
225
|
+
|
|
226
|
+
the review warnings in `summary.warnings`
|
|
227
|
+
<!-- E_ARVELDAJA_CAPABILITY_CONDITION_END:guided -->) are never booked by execute; explain each by its `code`:
|
|
228
|
+
- `own_account_not_bookable`: the counterparty IBAN is one of the company's own bank accounts, but that account has no accounting dimension, so nothing can be booked to it. The owner adds the dimension in e-arveldaja, then re-run the dry run.
|
|
229
|
+
- `unregistered_iban_needs_mirror`: the counterparty is the company itself, but its IBAN is not a registered own bank account (an own account not set up in e-arveldaja, or a provider's pooled top-up account such as Wise). It books automatically once the other account's matching row exists: import that account's statement, then re-run the dry run.<!-- E_ARVELDAJA_CAPABILITY_CONDITION_START:standard -->
|
|
230
|
+
Capability condition for `standard`: inspect the connected MCP server's advertised tool list before this section. Run this section only when every named tool is advertised: `confirm_transaction`. Otherwise skip this section and continue with the surrounding workflow. Never call a missing tool to probe capability.
|
|
231
|
+
|
|
232
|
+
If the other account is set up in e-arveldaja, the owner confirms it, and no statement will follow, confirm the row inline against that account after approval (`confirm_transaction` with `block_on_duplicate: true`). An own account not set up in e-arveldaja has nothing to confirm against; the owner adds it first.
|
|
233
|
+
<!-- E_ARVELDAJA_CAPABILITY_CONDITION_END:standard -->
|
|
234
|
+
- `camt_marker_unverified`: the stored CAMT marker fails its check, so direction and counterparty are unproven; compare the row with the bank statement before doing anything.
|
|
235
|
+
- <!-- E_ARVELDAJA_CAPABILITY_CONDITION_START:guided -->
|
|
236
|
+
Capability condition for `guided`: inspect the connected MCP server's advertised tool list before this section. Run this section only when every named tool is advertised: `reconcile_bank_transactions`, and none of these is advertised: `confirm_transaction`. Otherwise skip this section and continue with the surrounding workflow. Never call a missing tool to probe capability.
|
|
237
|
+
|
|
238
|
+
`ambiguous_refless` (or `ambiguous_refless_more` for overflow)
|
|
239
|
+
<!-- E_ARVELDAJA_CAPABILITY_CONDITION_END:guided --><!-- E_ARVELDAJA_CAPABILITY_CONDITION_START:standard -->
|
|
240
|
+
Capability condition for `standard`: inspect the connected MCP server's advertised tool list before this section. Run this section only when every named tool is advertised: `confirm_transaction`. Otherwise skip this section and continue with the surrounding workflow. Never call a missing tool to probe capability.
|
|
241
|
+
|
|
242
|
+
Without a code
|
|
243
|
+
<!-- E_ARVELDAJA_CAPABILITY_CONDITION_END:standard -->: a same-key journal or several possible target accounts; follow the row's `reason`.
|
|
219
244
|
|
|
220
245
|
Ask for approval. If the user does not explicitly approve, stop — the plan handle is not approval. If approved, call `reconcile_bank_transactions` with `mode: "execute_inter_account"` and `plan_handle` set to the handle from the reviewed dry run (required; consumed once). Pass the same `target_accounts_dimensions_id` / `max_date_gap` as the dry run, or the plan is refused with `plan_drift`.
|
|
221
246
|
- After execute, inspect the execution report (`status`, `command_partitions`, `stop_reason`) — on a partial execution do not retry automatically, re-run the dry run.
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.32.3] - 2026-10-26
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **A Wise payment you already booked by hand with its Wise ID as the journal's document number is recognised as booked instead of held for review.** Before, such a row (e.g. a transfer to a person or a loan paid out from Wise, booked as `WISE:TRANSFER-…`) was held as an undeterminable counterpart, or as an inconsistent journal when `inter_account_dimension_id` was given. Details: `import_wise_transactions` skips the row as `already_journalized` (record_id = the journal) when exactly one live, registered journal carries the row's exact Wise ID, names no other Wise ID, has an EUR amount on every posting, and its Wise-account postings move the row's EUR amount in the row's direction (gross, or net of the fee while debiting exactly the fee on the fee account, in which case the fee row is skipped too). The journal is bound into the plan digest and re-checked on execute like other already-journalized rows; its reconciliation detail carries no `ownership_basis`. For transfer rows, several labelled journals, another amount or direction, an unregistered journal or a foreign posting without an EUR base still hold as before; a journal that would expense the fee twice, or a Wise ID with another leg, is not treated as covering the row. Own transfers keep their existing inter-account handling.
|
|
10
|
+
|
|
11
|
+
- **A bank statement row is no longer flagged as booked in the wrong direction just because a different same-day payment of the same amount went the other way.** Before, an outgoing 300 EUR loan was held for review because an incoming 300 EUR withdrawal from another provider was already confirmed on the same day. Details: the CAMT inverted-registration check (`process_camt053`, and the matching partition in transaction classification) now ignores registration journals whose source transaction carries a different bank reference; an inverted booking of the same movement is still reported.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- **The bank-reconciliation and Wise-import guides explain the new review reasons.** Details: `workflows/reconcile-bank.md` describes `own_account_not_bookable`, `unregistered_iban_needs_mirror` (import the other account's statement, or on `standard`/`full` confirm inline after approval) and `camt_marker_unverified`; `workflows/import-wise.md` describes the exact-Wise-ID journal match. Two wall-clock test bounds were loosened so a busy machine no longer fails the suite.
|
|
16
|
+
|
|
17
|
+
## [0.32.2] - 2026-10-26
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **A transfer to one of your own bank accounts that e-arveldaja cannot book is held for review instead of being booked to a different account.** Before, a payment under the company's own name to an own account without an accounting dimension could be booked as a transfer to the only other registered account. Details: such rows are reported as `own_account_not_bookable` by reconciliation, transaction classification and `analyze_unconfirmed_transactions`; the Wise counterpart check no longer treats them as the bank side of a Wise movement.
|
|
22
|
+
- **A company-name payment to an IBAN that is not a registered own account is booked only when the other account's matching row proves the transfer.** This covers both an own account not set up in e-arveldaja and a payment provider's pooled account (e.g. a Wise top-up), which look identical. Details: with the mirror row present the pair is still matched and booked as before; without it the row is held as `unregistered_iban_needs_mirror` (also in `analyze_unconfirmed_transactions`), and the guidance no longer suggests a target parameter that could not help.
|
|
23
|
+
- **An own bank account whose IBAN field is empty is recognised by its account number.** Before, an empty `iban_code` hid `account_no`, so transfers to that account looked external.
|
|
24
|
+
- **A company-name transfer with an explicit `target_accounts_dimensions_id` can be executed.** Before, the dry run planned it but execution always stopped as plan drift because verification demanded a higher confidence than planning.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **Dependency maintenance updates.** Details: liteparse 2.17.0, MCP SDK 1.32.2, dotenv, vite and the Babel parser; `npm audit` is clean.
|
|
29
|
+
- Test sources are now type-checked in CI and release checks, with a ratchet that lets loose typing only decrease; tool payload types are exported by the producing modules. No runtime behaviour changes.
|
|
30
|
+
|
|
5
31
|
## [0.32.1] - 2026-10-19
|
|
6
32
|
|
|
7
33
|
### Fixed
|
package/CLAUDE.md
CHANGED
|
@@ -670,8 +670,16 @@ are not rewritten.
|
|
|
670
670
|
```bash
|
|
671
671
|
npx tsc --noEmit # Type-check without emitting
|
|
672
672
|
npx tsc # Full build to dist/
|
|
673
|
+
npm run typecheck:tests # typecheck tests + fixtures against the ratchet baseline
|
|
673
674
|
```
|
|
674
675
|
|
|
676
|
+
Test typing ratchet: `npm run typecheck:tests` also counts explicit `any` and untyped `parseMcpResponse` calls in
|
|
677
|
+
test sources (codes `ANY` / `UNTYPED_PAYLOAD`); they may only go down. Parse tool payloads with
|
|
678
|
+
`parseToolPayload<T>()` from `src/__fixtures__/mcp-response.ts`, where `T` is the payload type the producing
|
|
679
|
+
presenter exports. After removing loose typing, run `npm run typecheck:tests:update`.
|
|
680
|
+
A change that alters a tool's output shape also exports or updates that payload's type (in the producing
|
|
681
|
+
presenter/tool module) in the same commit, so producer types appear where output changes, not only where tests are added.
|
|
682
|
+
|
|
675
683
|
Unit tests use **vitest**:
|
|
676
684
|
```bash
|
|
677
685
|
npm run test # vitest run (all unit tests)
|
|
@@ -89,12 +89,16 @@ export declare function findDuplicatePostingsInJournals(journals: Journal[], can
|
|
|
89
89
|
amountTolerance?: number;
|
|
90
90
|
includeUnregistered?: boolean;
|
|
91
91
|
}): DuplicatePostingSuspect[];
|
|
92
|
+
/** Wire shape of a rendered suspect: the same fields, with `journal_title` / `document_number` sandbox-wrapped. */
|
|
93
|
+
export type RenderedDuplicatePostingSuspect = {
|
|
94
|
+
[K in keyof DuplicatePostingSuspect]: DuplicatePostingSuspect[K];
|
|
95
|
+
};
|
|
92
96
|
/**
|
|
93
97
|
* Suspects as MCP output: the journal title and document number are
|
|
94
98
|
* upstream free text, so both are sandbox-wrapped. The one rendering every
|
|
95
99
|
* `possible_duplicate_postings` list uses.
|
|
96
100
|
*/
|
|
97
|
-
export declare function renderDuplicatePostingSuspects(suspects: readonly DuplicatePostingSuspect[]):
|
|
101
|
+
export declare function renderDuplicatePostingSuspects(suspects: readonly DuplicatePostingSuspect[]): RenderedDuplicatePostingSuspect[];
|
|
98
102
|
/**
|
|
99
103
|
* API-facing scan: loads `opts.preloadedJournals` or
|
|
100
104
|
* `api.journals.listAllWithPostings()` and runs the pure matcher over it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank-posting-duplicate-guard.d.ts","sourceRoot":"","sources":["../src/bank-posting-duplicate-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM7E;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAqBD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE;IAC/C,QAAQ,EAAE;QAAE,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAAC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KAAE,CAAC;CAC9G,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuB/B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE;IACnD,QAAQ,EAAE;QAAE,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAAC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KAAE,CAAC;CAC9G,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW9B;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,yBAAyB,EACpC,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GACtF,uBAAuB,EAAE,CA+B3B;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"bank-posting-duplicate-guard.d.ts","sourceRoot":"","sources":["../src/bank-posting-duplicate-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM7E;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAqBD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE;IAC/C,QAAQ,EAAE;QAAE,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAAC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KAAE,CAAC;CAC9G,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAuB/B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE;IACnD,QAAQ,EAAE;QAAE,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAAC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KAAE,CAAC;CAC9G,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW9B;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,yBAAyB,EACpC,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GACtF,uBAAuB,EAAE,CA+B3B;AAED,mHAAmH;AACnH,MAAM,MAAM,+BAA+B,GAAG;KAAG,CAAC,IAAI,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,CAAC,CAAC;CAAE,CAAC;AAEnH;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAAG,+BAA+B,EAAE,CAM9H;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE;IAAE,QAAQ,EAAE;QAAE,mBAAmB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAA;CAAE,EAChE,SAAS,EAAE,yBAAyB,EACpC,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,GACtF,OAAO,CAAC,0BAA0B,CAAC,CAerC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE;IACH,QAAQ,EAAE;QAAE,mBAAmB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC;IACxD,QAAQ,EAAE;QAAE,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAAC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;KAAE,CAAC;CAC9G,EACD,KAAK,EAAE;IAAE,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAClE,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,0BAA0B,GAAG;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAsD3E;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,0BAA0B,EAClC,SAAS,EAAE,yBAAyB,EACpC,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAC/B,MAAM,EAAE,CAeV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank-posting-duplicate-guard.js","sourceRoot":"","sources":["../src/bank-posting-duplicate-guard.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bank-posting-duplicate-guard.js","sourceRoot":"","sources":["../src/bank-posting-duplicate-guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAoC/C,8EAA8E;AAC9E,0EAA0E;AAC1E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,SAAS,YAAY,CAAC,IAAY,EAAE,SAAiB;IACnD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAE3C;IACC,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1D,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE;QAC9B,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE;KACpC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,UAAU;YAAE,SAAS;QAC/C,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,EAAE,CAAC,sBAAsB,CAAC;QAC9C,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;YAAE,SAAS;QAC3D,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAE/C;IACC,IAAI,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,+BAA+B,OAAO,sGAAsG;SACvJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAAmB,EACnB,SAAoC,EACpC,IAAuF;IAEvF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,0BAA0B,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,EAAE,eAAe,IAAI,0BAA0B,CAAC;IACtE,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,4BAA4B,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE;QACvE,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE;QACV,mBAAmB,EAAE,IAAI,EAAE,mBAAmB;KAC/C,CAAC,CAAC;IAEH,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,SAAS,CAAC,WAAW,KAAK,IAAI,IAAI,GAAG,CAAC,sBAAsB,KAAK,SAAS,CAAC,WAAW;YAAE,SAAS;QACrG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,SAAS;YAAE,SAAS;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI;YAAE,SAAS;QACzE,IAAI,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QAC/D,QAAQ,CAAC,IAAI,CAAC;YACZ,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,sBAAsB;YACxC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AACjG,CAAC;AAKD;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAA4C;IACzF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,GAAG,CAAC;QACJ,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE;QACtD,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE;KAC3G,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAgE,EAChE,SAAoC,EACpC,IAAuF;IAEvF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,0BAA0B,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,EAAE,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5E,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,SAAS,EAAE,+BAA+B,OAAO,oEAAoE;YACrH,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAGC,EACD,KAAkE,EAClE,IAA8B;IAE9B,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,0BAA0B,CAAC;IAElE,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,EAAE;YACZ,qBAAqB,EAAE,IAAI;YAC3B,SAAS,EACP,oFAAoF;gBACpF,oGAAoG;gBACpG,wCAAwC;SAC3C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzE,CAAC;QAED,wEAAwE;QACxE,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,QAAQ,GAA8B,EAAE,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,SAAS,GAA8B;gBAC3C,SAAS;gBACT,WAAW,EAAE,IAAI,EAAE,0EAA0E;gBAC7F,MAAM,EAAE,KAAK,CAAC,cAAc;gBAC5B,SAAS,EAAE,GAAG,EAAE,qCAAqC;gBACrD,IAAI,EAAE,KAAK,CAAC,WAAW;aACxB,CAAC;YACF,KAAK,MAAM,OAAO,IAAI,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;gBAC3F,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;oBAAE,SAAS;gBACrD,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAExF,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,SAAS,EAAE,+BAA+B,OAAO,oEAAoE;YACrH,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAkC,EAClC,SAAoC,EACpC,SAAgC;IAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,yEAAyE;QACzE,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,KAAK,CAAC,IAAI,CACR,4BAA4B,MAAM,MAAM,aAAa,qCAAqC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,OAAO,CAAC,IAAI,GAAG,OAAO,+EAA+E,CAC7P,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/banking/reconciliation/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAqB7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/banking/reconciliation/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAqB7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AA+D5E,OAAO,KAAK,EAEV,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EAGjB,mBAAmB,EAGnB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EAInB,yBAAyB,EAMzB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAkBpB,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAUlD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACvC;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3D;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE,YAAY;IAA1C,YAAqB,OAAO,EAAE,YAAY,EAGzC;CACF;AAYD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,yBAAyB,CAAC,CAmMpC;AAyXD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,UAAU,EACf,oBAAoB,EAAE,oBAAoB,EAC1C,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,UAAU,EACf,oBAAoB,EAAE,oBAAoB,EAC1C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CA0BjD;AAID,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,iBAAiB,EACxB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAu6BlC;AAuBD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,UAAU,EACf,oBAAoB,EAAE,oBAAoB,EAC1C,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,mBAAmB,CAAC,CA6B9B;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,UAAU,EACf,oBAAoB,EAAE,oBAAoB,EAC1C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAoNjD"}
|
|
@@ -22,7 +22,7 @@ import { buildInvoiceIndex, getIndexedCandidates } from "./invoice-index.js";
|
|
|
22
22
|
import { legacyTruncatedCamtMarkerHint } from "../../camt/duplicate-identity.js";
|
|
23
23
|
import { matchScore, getInvoiceMatchEligibility, buildSuggestedDistribution, comparableTransactionAmount, sameAmountToTheCent, isAmbiguousForeignInvoiceBase } from "./match-score.js";
|
|
24
24
|
import { hasMeaningfulComparableAmount, resolveOneSidedTransferAmount, transactionCurrency } from "./amount-resolution.js";
|
|
25
|
-
import { counterpartyIbanOf, hasUnverifiableCamtMarker, inferOneSidedTransfer, isCamtCounterpartyIbanOmitted, resolveTransfer, resolveWithReferences, transferReferenceOf, transferReferencesOf, unverifiedMarkerTransferClaim, getTransferPairCompatibility, camtInstructionIdOf, wiseReferenceInstructionIdOf, getSameTypeReciprocalEvidence, } from "./inter-account-matcher.js";
|
|
25
|
+
import { counterpartyIbanOf, COUNTERPARTY_IBAN_NOT_REGISTERED, ONE_SIDED_MIN_CONFIDENCE, hasUnverifiableCamtMarker, inferOneSidedTransfer, isCamtCounterpartyIbanOmitted, resolveTransfer, resolveWithReferences, transferReferenceOf, transferReferencesOf, unverifiedMarkerTransferClaim, getTransferPairCompatibility, camtInstructionIdOf, wiseReferenceInstructionIdOf, getSameTypeReciprocalEvidence, } from "./inter-account-matcher.js";
|
|
26
26
|
import { computeExactMatchProjection, EXACT_CONFIRM_DEFAULT_MIN_CONFIDENCE } from "./duplicate-policy.js";
|
|
27
27
|
import { checkReceiptLedger, invoiceLinksFromTransaction, } from "../receipt-ledger-check.js";
|
|
28
28
|
import { exactMatchFingerprint, buildInterAccountPlanCommandProjections, interAccountFingerprint, } from "./projection.js";
|
|
@@ -654,10 +654,11 @@ export async function runInterAccountMatching(api, input, opts) {
|
|
|
654
654
|
const unconfirmed = await loadPendingTransactions(api, listedTx);
|
|
655
655
|
const allTx = new Map(unconfirmed.map(tx => [tx.id, tx]));
|
|
656
656
|
const companyName = normalizeCompanyName(invoiceInfo.invoice_company_name ?? "");
|
|
657
|
-
const { ownIbanToDimension, dimensionToIban, dimensionToTitle, dimensionToAccountsId, ownDimensionIds } = buildBankAccountLookups(bankAccounts, accountDimensions);
|
|
657
|
+
const { ownIbanToDimension, dimensionToIban, dimensionToTitle, dimensionToAccountsId, ownDimensionIds, ownIbansWithoutDimension } = buildBankAccountLookups(bankAccounts, accountDimensions);
|
|
658
658
|
const lookups = {
|
|
659
659
|
ownIbanToDimension,
|
|
660
660
|
dimensionToIban,
|
|
661
|
+
ownIbansWithoutDimension,
|
|
661
662
|
companyName,
|
|
662
663
|
companyLegalName: invoiceInfo.invoice_company_name ?? "",
|
|
663
664
|
targetAccountsDimensionsId: target_accounts_dimensions_id,
|
|
@@ -735,7 +736,9 @@ export async function runInterAccountMatching(api, input, opts) {
|
|
|
735
736
|
ambiguousRefless.push({
|
|
736
737
|
transaction_ids: [tx.id], amount: tx.amount, date: tx.date,
|
|
737
738
|
source_account: dimensionToTitle.get(tx.accounts_dimensions_id) ?? `dim:${tx.accounts_dimensions_id}`,
|
|
738
|
-
target_account: claimedTargets.
|
|
739
|
+
target_account: claimedTargets.length > 0
|
|
740
|
+
? claimedTargets.map(d => dimensionToTitle.get(d) ?? `dim:${d}`).join(" / ")
|
|
741
|
+
: claim.unbookableOwnIban ?? "",
|
|
739
742
|
code: "camt_marker_unverified",
|
|
740
743
|
reason: `Transaction ${tx.id} looks like an own-account transfer, but its CAMT statement marker fails the signature check, so its statement identity (counterparty IBAN, direction) cannot be verified. It is excluded from automatic matching; check the bank statement and resolve it manually.` +
|
|
741
744
|
(legacyTruncatedCamtMarkerHint(tx) ? ` ${legacyTruncatedCamtMarkerHint(tx)}` : ""),
|
|
@@ -1301,7 +1304,19 @@ export async function runInterAccountMatching(api, input, opts) {
|
|
|
1301
1304
|
for (const tx of remaining) {
|
|
1302
1305
|
if (!tx.id || blockedOneSidedTxIds.has(tx.id) || consumedTxIds.has(tx.id))
|
|
1303
1306
|
continue;
|
|
1304
|
-
const { targetDimension, confidence, reasons, ambiguousTargetDimensions } = inferOneSidedTransfer(tx, lookups, oneSidedInferenceCache);
|
|
1307
|
+
const { targetDimension, confidence, reasons, ambiguousTargetDimensions, unbookableOwnIban } = inferOneSidedTransfer(tx, lookups, oneSidedInferenceCache);
|
|
1308
|
+
if (unbookableOwnIban) {
|
|
1309
|
+
// The company's own money, but the account on the other side cannot be booked:
|
|
1310
|
+
// never redirect it to a different own account.
|
|
1311
|
+
ambiguousRefless.push({
|
|
1312
|
+
transaction_ids: [tx.id], amount: tx.amount, date: tx.date,
|
|
1313
|
+
source_account: dimensionToTitle.get(tx.accounts_dimensions_id) ?? `dim:${tx.accounts_dimensions_id}`,
|
|
1314
|
+
target_account: unbookableOwnIban,
|
|
1315
|
+
code: "own_account_not_bookable",
|
|
1316
|
+
reason: `The counterparty IBAN ${unbookableOwnIban} is an own bank account without an accounting dimension, so the transfer cannot be booked to it; give that bank account a dimension in e-arveldaja, then reconcile again, or confirm inline.`,
|
|
1317
|
+
});
|
|
1318
|
+
continue;
|
|
1319
|
+
}
|
|
1305
1320
|
if (ambiguousTargetDimensions) {
|
|
1306
1321
|
ambiguousRefless.push({
|
|
1307
1322
|
transaction_ids: [tx.id], amount: tx.amount, date: tx.date,
|
|
@@ -1315,15 +1330,24 @@ export async function runInterAccountMatching(api, input, opts) {
|
|
|
1315
1330
|
// The payer is the company itself, but several own accounts could be
|
|
1316
1331
|
// the other side: report it rather than silently dropping the row.
|
|
1317
1332
|
const otherDimensions = [...dimensionToIban.keys()].filter(d => d !== tx.accounts_dimensions_id);
|
|
1333
|
+
const unregisteredIban = reasons.includes(COUNTERPARTY_IBAN_NOT_REGISTERED);
|
|
1318
1334
|
ambiguousRefless.push({
|
|
1319
1335
|
transaction_ids: [tx.id], amount: tx.amount, date: tx.date,
|
|
1320
1336
|
source_account: dimensionToTitle.get(tx.accounts_dimensions_id) ?? `dim:${tx.accounts_dimensions_id}`,
|
|
1321
1337
|
target_account: otherDimensions.map(d => dimensionToTitle.get(d) ?? `dim:${d}`).join(" / "),
|
|
1322
|
-
|
|
1338
|
+
// A target parameter would not help an unregistered IBAN: it is held until its mirror row proves it.
|
|
1339
|
+
...(unregisteredIban
|
|
1340
|
+
? {
|
|
1341
|
+
code: "unregistered_iban_needs_mirror",
|
|
1342
|
+
reason: `The counterparty is the company itself, but its counterparty IBAN is not a registered own bank account and several own accounts could be the other side (dimensions ${otherDimensions.join(", ")}). It is booked automatically only once the other account's mirror row proves the transfer; register the account or confirm inline.`,
|
|
1343
|
+
}
|
|
1344
|
+
: {
|
|
1345
|
+
reason: `The counterparty is the company itself, but several own accounts could be the other side (dimensions ${otherDimensions.join(", ")}); pass target_accounts_dimensions_id naming one of them, or confirm inline.`,
|
|
1346
|
+
}),
|
|
1323
1347
|
});
|
|
1324
1348
|
continue;
|
|
1325
1349
|
}
|
|
1326
|
-
if (confidence <
|
|
1350
|
+
if (confidence < ONE_SIDED_MIN_CONFIDENCE || !targetDimension)
|
|
1327
1351
|
continue;
|
|
1328
1352
|
const sourceTitle = dimensionToTitle.get(tx.accounts_dimensions_id) ?? `dim:${tx.accounts_dimensions_id}`;
|
|
1329
1353
|
const targetTitle = dimensionToTitle.get(targetDimension) ?? `dim:${targetDimension}`;
|
|
@@ -1413,6 +1437,14 @@ export async function runInterAccountMatching(api, input, opts) {
|
|
|
1413
1437
|
continue;
|
|
1414
1438
|
}
|
|
1415
1439
|
consumedTxIds.add(tx.id);
|
|
1440
|
+
if (reasons.includes(COUNTERPARTY_IBAN_NOT_REGISTERED)) {
|
|
1441
|
+
ambiguousRefless.push({
|
|
1442
|
+
transaction_ids: [tx.id], amount: nominalAmount, currency, amount_eur: amountEur, date: tx.date,
|
|
1443
|
+
source_account: sourceTitle, target_account: targetTitle, code: "unregistered_iban_needs_mirror",
|
|
1444
|
+
reason: `The counterparty name is the company's, but its counterparty IBAN is not a registered own bank account (an own account not set up in e-arveldaja, or a payment provider's pooled account). It is booked automatically only once the other account's mirror row proves the transfer; register the account or confirm inline if this is a transfer to ${targetTitle}.`,
|
|
1445
|
+
});
|
|
1446
|
+
continue;
|
|
1447
|
+
}
|
|
1416
1448
|
matchedOneSided.push({
|
|
1417
1449
|
transaction_id: tx.id, type: tx.type, amount: nominalAmount, currency, amount_eur: amountEur, date: tx.date,
|
|
1418
1450
|
source_account: sourceTitle, source_dimension_id: tx.accounts_dimensions_id,
|
|
@@ -1543,7 +1575,7 @@ export async function executeInterAccount(api, runtimeSafetyContext, input) {
|
|
|
1543
1575
|
const lookups = { ...mapping, companyName: normalizeCompanyName(match.invoiceInfo.invoice_company_name ?? ""), companyLegalName: match.invoiceInfo.invoice_company_name ?? "", targetAccountsDimensionsId: input.targetAccountsDimensionsId };
|
|
1544
1576
|
const sourceInference = inferOneSidedTransfer(source, lookups, new Map());
|
|
1545
1577
|
if (!mirror)
|
|
1546
|
-
return sourceInference.targetDimension === action.targetDimensionId && sourceInference.confidence >=
|
|
1578
|
+
return sourceInference.targetDimension === action.targetDimensionId && sourceInference.confidence >= ONE_SIDED_MIN_CONFIDENCE && !sourceInference.reasons.includes(COUNTERPARTY_IBAN_NOT_REGISTERED);
|
|
1547
1579
|
const compatibility = getTransferPairCompatibility(source, mirror, action.pairEvidence.maxDateGap);
|
|
1548
1580
|
if (!compatibility || compatibility.conflictingComparableAmounts || !sameAmountToTheCent(compatibility.txAComparableAmount, action.distributionAmount))
|
|
1549
1581
|
return false;
|