@accounter/server 0.0.8-alpha-20251102200443-d7162b8ce1dfc629b8b454df17dcec9ed005a052 → 0.0.8-alpha-20251102213150-c9d936f545d5351df0dc5326c2623266f1ad1f46
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 +47 -7
- package/dist/green-invoice-graphql/src/mesh-artifacts/index.d.ts +1 -1
- package/dist/server/src/__generated__/types.d.ts +77 -0
- package/dist/server/src/__generated__/types.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__generated__/types.d.ts +68 -0
- package/dist/server/src/modules/charges-matcher/__generated__/types.js +7 -0
- package/dist/server/src/modules/charges-matcher/__generated__/types.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/amount-confidence.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/amount-confidence.test.js +218 -0
- package/dist/server/src/modules/charges-matcher/__tests__/amount-confidence.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js +645 -0
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js +530 -0
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/business-confidence.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/business-confidence.test.js +143 -0
- package/dist/server/src/modules/charges-matcher/__tests__/business-confidence.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/candidate-filter.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/candidate-filter.test.js +186 -0
- package/dist/server/src/modules/charges-matcher/__tests__/candidate-filter.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js +301 -0
- package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/currency-confidence.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/currency-confidence.test.js +127 -0
- package/dist/server/src/modules/charges-matcher/__tests__/currency-confidence.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js +246 -0
- package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.js +475 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js +287 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-business.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-business.test.js +151 -0
- package/dist/server/src/modules/charges-matcher/__tests__/document-business.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js +550 -0
- package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/overall-confidence.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/overall-confidence.test.js +410 -0
- package/dist/server/src/modules/charges-matcher/__tests__/overall-confidence.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js +504 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js +483 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/test-helpers.d.ts +46 -0
- package/dist/server/src/modules/charges-matcher/__tests__/test-helpers.js +143 -0
- package/dist/server/src/modules/charges-matcher/__tests__/test-helpers.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/test-infrastructure.spec.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/test-infrastructure.spec.js +137 -0
- package/dist/server/src/modules/charges-matcher/__tests__/test-infrastructure.spec.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/transaction-aggregator.test.d.ts +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/transaction-aggregator.test.js +415 -0
- package/dist/server/src/modules/charges-matcher/__tests__/transaction-aggregator.test.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/amount-confidence.helper.d.ts +7 -0
- package/dist/server/src/modules/charges-matcher/helpers/amount-confidence.helper.js +70 -0
- package/dist/server/src/modules/charges-matcher/helpers/amount-confidence.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/business-confidence.helper.d.ts +7 -0
- package/dist/server/src/modules/charges-matcher/helpers/business-confidence.helper.js +19 -0
- package/dist/server/src/modules/charges-matcher/helpers/business-confidence.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/candidate-filter.helper.d.ts +24 -0
- package/dist/server/src/modules/charges-matcher/helpers/candidate-filter.helper.js +45 -0
- package/dist/server/src/modules/charges-matcher/helpers/candidate-filter.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.d.ts +33 -0
- package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js +65 -0
- package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/currency-confidence.helper.d.ts +7 -0
- package/dist/server/src/modules/charges-matcher/helpers/currency-confidence.helper.js +18 -0
- package/dist/server/src/modules/charges-matcher/helpers/currency-confidence.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.d.ts +7 -0
- package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js +35 -0
- package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.d.ts +49 -0
- package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js +58 -0
- package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/document-business.helper.d.ts +13 -0
- package/dist/server/src/modules/charges-matcher/helpers/document-business.helper.js +37 -0
- package/dist/server/src/modules/charges-matcher/helpers/document-business.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/helpers/overall-confidence.helper.d.ts +42 -0
- package/dist/server/src/modules/charges-matcher/helpers/overall-confidence.helper.js +77 -0
- package/dist/server/src/modules/charges-matcher/helpers/overall-confidence.helper.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/index.d.ts +3 -0
- package/dist/server/src/modules/charges-matcher/index.js +15 -0
- package/dist/server/src/modules/charges-matcher/index.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.d.ts +48 -0
- package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js +133 -0
- package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.d.ts +38 -0
- package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js +248 -0
- package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/providers/document-aggregator.d.ts +61 -0
- package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js +153 -0
- package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.d.ts +25 -0
- package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js +114 -0
- package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/providers/single-match.provider.d.ts +39 -0
- package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js +189 -0
- package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.d.ts +54 -0
- package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.js +93 -0
- package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.d.ts +2 -0
- package/dist/server/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.js +22 -0
- package/dist/server/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.d.ts +2 -0
- package/dist/server/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.js +24 -0
- package/dist/server/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/resolvers/index.d.ts +2 -0
- package/dist/server/src/modules/charges-matcher/resolvers/index.js +11 -0
- package/dist/server/src/modules/charges-matcher/resolvers/index.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.d.ts +2 -0
- package/dist/server/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.js +47 -0
- package/dist/server/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/types.d.ts +179 -0
- package/dist/server/src/modules/charges-matcher/types.js +14 -0
- package/dist/server/src/modules/charges-matcher/types.js.map +1 -0
- package/dist/server/src/modules/documents/resolvers/document-suggestions.resolver.js +2 -2
- package/dist/server/src/modules/documents/resolvers/document-suggestions.resolver.js.map +1 -1
- package/dist/server/src/modules-app.js +2 -0
- package/dist/server/src/modules-app.js.map +1 -1
- package/dist/server/src/shared/types/index.d.ts +1 -1
- package/package.json +4 -4
- package/src/__generated__/types.ts +87 -0
- package/src/modules/charges-matcher/README.md +279 -0
- package/src/modules/charges-matcher/__generated__/types.ts +71 -0
- package/src/modules/charges-matcher/__tests__/amount-confidence.test.ts +260 -0
- package/src/modules/charges-matcher/__tests__/auto-match-integration.test.ts +714 -0
- package/src/modules/charges-matcher/__tests__/auto-match.test.ts +621 -0
- package/src/modules/charges-matcher/__tests__/business-confidence.test.ts +177 -0
- package/src/modules/charges-matcher/__tests__/candidate-filter.test.ts +238 -0
- package/src/modules/charges-matcher/__tests__/charge-validator.test.ts +374 -0
- package/src/modules/charges-matcher/__tests__/currency-confidence.test.ts +164 -0
- package/src/modules/charges-matcher/__tests__/date-confidence.test.ts +291 -0
- package/src/modules/charges-matcher/__tests__/document-aggregator.test.ts +614 -0
- package/src/modules/charges-matcher/__tests__/document-amount.test.ts +352 -0
- package/src/modules/charges-matcher/__tests__/document-business.test.ts +192 -0
- package/src/modules/charges-matcher/__tests__/match-scorer.test.ts +659 -0
- package/src/modules/charges-matcher/__tests__/overall-confidence.test.ts +502 -0
- package/src/modules/charges-matcher/__tests__/single-match-integration.test.ts +556 -0
- package/src/modules/charges-matcher/__tests__/single-match.test.ts +608 -0
- package/src/modules/charges-matcher/__tests__/test-helpers.ts +174 -0
- package/src/modules/charges-matcher/__tests__/test-infrastructure.spec.ts +177 -0
- package/src/modules/charges-matcher/__tests__/transaction-aggregator.test.ts +547 -0
- package/src/modules/charges-matcher/documentation/README.md +331 -0
- package/src/modules/charges-matcher/documentation/SPEC.md +1503 -0
- package/src/modules/charges-matcher/documentation/TODO.md +799 -0
- package/src/modules/charges-matcher/helpers/amount-confidence.helper.ts +88 -0
- package/src/modules/charges-matcher/helpers/business-confidence.helper.ts +23 -0
- package/src/modules/charges-matcher/helpers/candidate-filter.helper.ts +56 -0
- package/src/modules/charges-matcher/helpers/charge-validator.helper.ts +100 -0
- package/src/modules/charges-matcher/helpers/currency-confidence.helper.ts +22 -0
- package/src/modules/charges-matcher/helpers/date-confidence.helper.ts +41 -0
- package/src/modules/charges-matcher/helpers/document-amount.helper.ts +77 -0
- package/src/modules/charges-matcher/helpers/document-business.helper.ts +54 -0
- package/src/modules/charges-matcher/helpers/overall-confidence.helper.ts +90 -0
- package/src/modules/charges-matcher/index.ts +17 -0
- package/src/modules/charges-matcher/providers/auto-match.provider.ts +176 -0
- package/src/modules/charges-matcher/providers/charges-matcher.provider.ts +322 -0
- package/src/modules/charges-matcher/providers/document-aggregator.ts +211 -0
- package/src/modules/charges-matcher/providers/match-scorer.provider.ts +154 -0
- package/src/modules/charges-matcher/providers/single-match.provider.ts +252 -0
- package/src/modules/charges-matcher/providers/transaction-aggregator.ts +131 -0
- package/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.ts +23 -0
- package/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.ts +25 -0
- package/src/modules/charges-matcher/resolvers/index.ts +12 -0
- package/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.ts +47 -0
- package/src/modules/charges-matcher/types.ts +200 -0
- package/src/modules/documents/resolvers/document-suggestions.resolver.ts +2 -2
- package/src/modules-app.ts +2 -0
- package/src/shared/types/index.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @accounter/server
|
|
2
2
|
|
|
3
|
-
## 0.0.8-alpha-
|
|
3
|
+
## 0.0.8-alpha-20251102213150-c9d936f545d5351df0dc5326c2623266f1ad1f46
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
@@ -249,6 +249,21 @@
|
|
|
249
249
|
- Updated dependency [`ai@5.0.82` ↗︎](https://www.npmjs.com/package/ai/v/5.0.82) (from `5.0.81`,
|
|
250
250
|
in `dependencies`)
|
|
251
251
|
|
|
252
|
+
- [#2647](https://github.com/Urigo/accounter-fullstack/pull/2647)
|
|
253
|
+
[`f171a4a`](https://github.com/Urigo/accounter-fullstack/commit/f171a4a83c5f30b0135c72991b4796677223ff39)
|
|
254
|
+
Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates:
|
|
255
|
+
- Updated dependency
|
|
256
|
+
[`@ai-sdk/anthropic@2.0.40` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/2.0.40) (from
|
|
257
|
+
`2.0.39`, in `dependencies`)
|
|
258
|
+
- Updated dependency [`ai@5.0.86` ↗︎](https://www.npmjs.com/package/ai/v/5.0.86) (from `5.0.82`,
|
|
259
|
+
in `dependencies`)
|
|
260
|
+
|
|
261
|
+
- [#2654](https://github.com/Urigo/accounter-fullstack/pull/2654)
|
|
262
|
+
[`7fef068`](https://github.com/Urigo/accounter-fullstack/commit/7fef0682c7316153ae5ffde42f97ce7284dd4c9a)
|
|
263
|
+
Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates:
|
|
264
|
+
- Updated dependency [`graphql@16.12.0` ↗︎](https://www.npmjs.com/package/graphql/v/16.12.0)
|
|
265
|
+
(from `16.11.0`, in `dependencies`)
|
|
266
|
+
|
|
252
267
|
- [#2631](https://github.com/Urigo/accounter-fullstack/pull/2631)
|
|
253
268
|
[`86c8b3e`](https://github.com/Urigo/accounter-fullstack/commit/86c8b3ebea4e3be0c0e99a108ec1cdad8b39e5d8)
|
|
254
269
|
Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Database Schema Update**: A new
|
|
@@ -284,6 +299,29 @@
|
|
|
284
299
|
retrieved 'adminContext.locality' instead of a hardcoded country name, improving flexibility and
|
|
285
300
|
accuracy.
|
|
286
301
|
|
|
302
|
+
- [#2649](https://github.com/Urigo/accounter-fullstack/pull/2649)
|
|
303
|
+
[`c9d936f`](https://github.com/Urigo/accounter-fullstack/commit/c9d936f545d5351df0dc5326c2623266f1ad1f46)
|
|
304
|
+
Thanks [@gilgardosh](https://github.com/gilgardosh)! - \* **New Charges Auto-Matcher Module**: A
|
|
305
|
+
new GraphQL module `charges-matcher` has been introduced, complete with its directory structure,
|
|
306
|
+
TypeScript types, and GraphQL schema definitions for single-match and auto-match functionalities.
|
|
307
|
+
- **Comprehensive Documentation**: Detailed `SPEC.md`, `PROMPT_PLAN.md`, and `TODO.md` documents
|
|
308
|
+
have been added, outlining the technical specification, a 17-step implementation plan, and a
|
|
309
|
+
checklist for the transaction-document matching system.
|
|
310
|
+
- **Core Matching Logic Implemented**: Helper functions for calculating confidence scores based on
|
|
311
|
+
amount, currency, business ID, and date proximity have been implemented and thoroughly tested.
|
|
312
|
+
- **Data Aggregation Providers**: Providers for aggregating multiple transactions and documents
|
|
313
|
+
into single representations, including filtering, currency/business ID validation, and
|
|
314
|
+
description concatenation, are now in place.
|
|
315
|
+
- **Single-Match & Auto-Match Core Functions**: The core logic for finding single matches (with
|
|
316
|
+
date window filtering and tie-breaking) and for processing charges for auto-matching (including
|
|
317
|
+
merge direction determination and high-confidence thresholding) has been developed.
|
|
318
|
+
- **Robust Testing Infrastructure**: A comprehensive testing framework, including mock factories
|
|
319
|
+
and 494 passing unit and integration tests, has been established, ensuring high code coverage.
|
|
320
|
+
- **GraphQL Integration**: GraphQL resolvers for `findChargeMatches` and `autoMatchCharges`
|
|
321
|
+
mutations/queries have been added, and the module is registered in the main GraphQL application.
|
|
322
|
+
- **Type Safety Improvement**: The `amount` type in the `DocumentSuggestionsProto` interface has
|
|
323
|
+
been updated from `string` to `number` for enhanced type safety.
|
|
324
|
+
|
|
287
325
|
- [#2629](https://github.com/Urigo/accounter-fullstack/pull/2629)
|
|
288
326
|
[`6244c1b`](https://github.com/Urigo/accounter-fullstack/commit/6244c1bbafa7029f426bdaf796d830ff62cee006)
|
|
289
327
|
Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Database Schema Update**: The
|
|
@@ -536,7 +574,7 @@
|
|
|
536
574
|
improved performance.
|
|
537
575
|
|
|
538
576
|
- [#2658](https://github.com/Urigo/accounter-fullstack/pull/2658)
|
|
539
|
-
[`
|
|
577
|
+
[`7a898a0`](https://github.com/Urigo/accounter-fullstack/commit/7a898a0ff1ee15420ab2532370a1d2f618cc86ab)
|
|
540
578
|
Thanks [@gilgardosh](https://github.com/gilgardosh)! - - Updated all type references from
|
|
541
579
|
`definitions` to `$defs` (represented as `_DOLLAR_defs` in TypeScript)
|
|
542
580
|
- Added client management operations (add, update, delete)
|
|
@@ -563,14 +601,16 @@
|
|
|
563
601
|
where the configuration might be `undefined`.
|
|
564
602
|
- Updated dependencies
|
|
565
603
|
[[`1ae19c6`](https://github.com/Urigo/accounter-fullstack/commit/1ae19c6f8dabd995120862795284dab6e363dc79),
|
|
604
|
+
[`7fef068`](https://github.com/Urigo/accounter-fullstack/commit/7fef0682c7316153ae5ffde42f97ce7284dd4c9a),
|
|
566
605
|
[`65e3c7f`](https://github.com/Urigo/accounter-fullstack/commit/65e3c7f01993eb4f41244a40feefefa08b31a4e6),
|
|
567
606
|
[`65e3c7f`](https://github.com/Urigo/accounter-fullstack/commit/65e3c7f01993eb4f41244a40feefefa08b31a4e6),
|
|
568
607
|
[`65e3c7f`](https://github.com/Urigo/accounter-fullstack/commit/65e3c7f01993eb4f41244a40feefefa08b31a4e6),
|
|
569
|
-
[`
|
|
570
|
-
-
|
|
571
|
-
- @accounter/
|
|
572
|
-
- @accounter/
|
|
573
|
-
- @accounter/
|
|
608
|
+
[`7a898a0`](https://github.com/Urigo/accounter-fullstack/commit/7a898a0ff1ee15420ab2532370a1d2f618cc86ab),
|
|
609
|
+
[`c9d936f`](https://github.com/Urigo/accounter-fullstack/commit/c9d936f545d5351df0dc5326c2623266f1ad1f46)]:
|
|
610
|
+
- @accounter/green-invoice-graphql@0.8.2-alpha-20251102213150-c9d936f545d5351df0dc5326c2623266f1ad1f46
|
|
611
|
+
- @accounter/pcn874-generator@0.6.3-alpha-20251102213150-c9d936f545d5351df0dc5326c2623266f1ad1f46
|
|
612
|
+
- @accounter/shaam-uniform-format-generator@0.2.2-alpha-20251102213150-c9d936f545d5351df0dc5326c2623266f1ad1f46
|
|
613
|
+
- @accounter/shaam6111-generator@0.1.4-alpha-20251102213150-c9d936f545d5351df0dc5326c2623266f1ad1f46
|
|
574
614
|
|
|
575
615
|
## 0.0.7
|
|
576
616
|
|
|
@@ -4,8 +4,8 @@ import type { GetMeshOptions } from '@graphql-mesh/runtime';
|
|
|
4
4
|
import type { YamlConfig } from '@graphql-mesh/types';
|
|
5
5
|
import { MeshHTTPHandler } from '@graphql-mesh/http';
|
|
6
6
|
import { type ExecuteMeshFn, type SubscribeMeshFn, type MeshContext as BaseMeshContext, type MeshInstance } from '@graphql-mesh/runtime';
|
|
7
|
-
import type { GreenInvoiceNewTypes } from './sources/GreenInvoiceNew/types';
|
|
8
7
|
import type { GreenInvoiceTypes } from './sources/GreenInvoice/types';
|
|
8
|
+
import type { GreenInvoiceNewTypes } from './sources/GreenInvoiceNew/types';
|
|
9
9
|
export type Maybe<T> = T | null;
|
|
10
10
|
export type InputMaybe<T> = Maybe<T>;
|
|
11
11
|
export type Exact<T extends {
|
|
@@ -362,6 +362,18 @@ export type AuditOpinionType =
|
|
|
362
362
|
| 'UNQUALIFIED_WITH_GOING_CONCERN'
|
|
363
363
|
/** Unqualified opinion with other emphases (בנוסח אחיד עם הפניות תשומת לב אחרת) */
|
|
364
364
|
| 'UNQUALIFIED_WITH_OTHER_EMPHASES';
|
|
365
|
+
/** Result of the auto-match operation */
|
|
366
|
+
export type AutoMatchChargesResult = {
|
|
367
|
+
readonly __typename?: 'AutoMatchChargesResult';
|
|
368
|
+
/** Array of error messages encountered during the operation */
|
|
369
|
+
readonly errors: ReadonlyArray<Scalars['String']['output']>;
|
|
370
|
+
/** Array of charges that were merged, with their confidence scores */
|
|
371
|
+
readonly mergedCharges: ReadonlyArray<MergedCharge>;
|
|
372
|
+
/** Array of charge UUIDs that had multiple high-confidence matches and were skipped */
|
|
373
|
+
readonly skippedCharges: ReadonlyArray<Scalars['UUID']['output']>;
|
|
374
|
+
/** Total number of charges that were successfully matched and merged */
|
|
375
|
+
readonly totalMatches: Scalars['Int']['output'];
|
|
376
|
+
};
|
|
365
377
|
/** transactions for balance report */
|
|
366
378
|
export type BalanceTransactions = {
|
|
367
379
|
readonly __typename?: 'BalanceTransactions';
|
|
@@ -839,6 +851,20 @@ export type ChargeFilter = {
|
|
|
839
851
|
};
|
|
840
852
|
/** filter charges by type */
|
|
841
853
|
export type ChargeFilterType = 'ALL' | 'EXPENSE' | 'INCOME';
|
|
854
|
+
/** A single charge match with its confidence score */
|
|
855
|
+
export type ChargeMatch = {
|
|
856
|
+
readonly __typename?: 'ChargeMatch';
|
|
857
|
+
/** UUID of the matched charge */
|
|
858
|
+
readonly chargeId: Scalars['UUID']['output'];
|
|
859
|
+
/** Confidence score between 0.00 and 1.00 */
|
|
860
|
+
readonly confidenceScore: Scalars['Float']['output'];
|
|
861
|
+
};
|
|
862
|
+
/** Result of finding matches for a single charge */
|
|
863
|
+
export type ChargeMatchesResult = {
|
|
864
|
+
readonly __typename?: 'ChargeMatchesResult';
|
|
865
|
+
/** Array of up to 5 matches, ordered by confidence score (highest first) */
|
|
866
|
+
readonly matches: ReadonlyArray<ChargeMatch>;
|
|
867
|
+
};
|
|
842
868
|
/** represent charge's metadata */
|
|
843
869
|
export type ChargeMetadata = {
|
|
844
870
|
readonly __typename?: 'ChargeMetadata';
|
|
@@ -2085,6 +2111,14 @@ export type MergeChargesByTransactionReferenceResult = {
|
|
|
2085
2111
|
readonly errors?: Maybe<ReadonlyArray<Scalars['String']['output']>>;
|
|
2086
2112
|
readonly success: Scalars['Boolean']['output'];
|
|
2087
2113
|
};
|
|
2114
|
+
/** A charge that was successfully merged during auto-match */
|
|
2115
|
+
export type MergedCharge = {
|
|
2116
|
+
readonly __typename?: 'MergedCharge';
|
|
2117
|
+
/** UUID of the deleted/merged-away charge */
|
|
2118
|
+
readonly chargeId: Scalars['UUID']['output'];
|
|
2119
|
+
/** Confidence score that triggered the merge */
|
|
2120
|
+
readonly confidenceScore: Scalars['Float']['output'];
|
|
2121
|
+
};
|
|
2088
2122
|
/** a misc expense */
|
|
2089
2123
|
export type MiscExpense = {
|
|
2090
2124
|
readonly __typename?: 'MiscExpense';
|
|
@@ -2142,6 +2176,8 @@ export type Mutation = {
|
|
|
2142
2176
|
readonly addDeelContract: Scalars['Boolean']['output'];
|
|
2143
2177
|
readonly addSortCode: Scalars['Boolean']['output'];
|
|
2144
2178
|
readonly addTag: Scalars['Boolean']['output'];
|
|
2179
|
+
/** Automatically match all unmatched charges above the confidence threshold */
|
|
2180
|
+
readonly autoMatchCharges: AutoMatchChargesResult;
|
|
2145
2181
|
readonly batchGenerateBusinessesOutOfTransactions: ReadonlyArray<Business>;
|
|
2146
2182
|
readonly batchUpdateCharges: BatchUpdateChargesResult;
|
|
2147
2183
|
readonly batchUploadDocuments: ReadonlyArray<UploadDocumentResult>;
|
|
@@ -2886,6 +2922,8 @@ export type Query = {
|
|
|
2886
2922
|
/** get exchage rates by date */
|
|
2887
2923
|
readonly exchangeRates?: Maybe<ExchangeRates>;
|
|
2888
2924
|
readonly financialEntity: FinancialEntity;
|
|
2925
|
+
/** Find potential matches for a single unmatched charge */
|
|
2926
|
+
readonly findChargeMatches: ChargeMatchesResult;
|
|
2889
2927
|
readonly gmailListenerStatus: Scalars['Boolean']['output'];
|
|
2890
2928
|
readonly greenInvoiceClient: GreenInvoiceClient;
|
|
2891
2929
|
readonly incomeExpenseChart: IncomeExpenseChart;
|
|
@@ -3065,6 +3103,10 @@ export type QueryFinancialEntityArgs = {
|
|
|
3065
3103
|
id: Scalars['UUID']['input'];
|
|
3066
3104
|
};
|
|
3067
3105
|
/** query root */
|
|
3106
|
+
export type QueryFindChargeMatchesArgs = {
|
|
3107
|
+
chargeId: Scalars['UUID']['input'];
|
|
3108
|
+
};
|
|
3109
|
+
/** query root */
|
|
3068
3110
|
export type QueryGreenInvoiceClientArgs = {
|
|
3069
3111
|
clientId: Scalars['UUID']['input'];
|
|
3070
3112
|
};
|
|
@@ -4142,6 +4184,7 @@ export type ResolversTypes = {
|
|
|
4142
4184
|
AnnualId: ResolverTypeWrapper<AnnualId>;
|
|
4143
4185
|
AnnualIdInput: AnnualIdInput;
|
|
4144
4186
|
AuditOpinionType: AuditOpinionType;
|
|
4187
|
+
AutoMatchChargesResult: ResolverTypeWrapper<AutoMatchChargesResult>;
|
|
4145
4188
|
BalanceTransactions: ResolverTypeWrapper<IGetNormalizedBalanceTransactionsResult>;
|
|
4146
4189
|
BankDeposit: ResolverTypeWrapper<Omit<BankDeposit, 'transactions'> & {
|
|
4147
4190
|
transactions: ReadonlyArray<ResolversTypes['Transaction']>;
|
|
@@ -4191,6 +4234,8 @@ export type ResolversTypes = {
|
|
|
4191
4234
|
Charge: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['Charge']>;
|
|
4192
4235
|
ChargeFilter: ChargeFilter;
|
|
4193
4236
|
ChargeFilterType: ChargeFilterType;
|
|
4237
|
+
ChargeMatch: ResolverTypeWrapper<ChargeMatch>;
|
|
4238
|
+
ChargeMatchesResult: ResolverTypeWrapper<ChargeMatchesResult>;
|
|
4194
4239
|
ChargeMetadata: ResolverTypeWrapper<IGetChargesByIdsResult>;
|
|
4195
4240
|
ChargeSortBy: ChargeSortBy;
|
|
4196
4241
|
ChargeSortByField: ChargeSortByField;
|
|
@@ -4342,6 +4387,7 @@ export type ResolversTypes = {
|
|
|
4342
4387
|
MergeChargesByTransactionReferenceResult: ResolverTypeWrapper<Omit<MergeChargesByTransactionReferenceResult, 'charges'> & {
|
|
4343
4388
|
charges?: Maybe<ReadonlyArray<ResolversTypes['Charge']>>;
|
|
4344
4389
|
}>;
|
|
4390
|
+
MergedCharge: ResolverTypeWrapper<MergedCharge>;
|
|
4345
4391
|
MiscExpense: ResolverTypeWrapper<IGetExpensesByChargeIdsResult>;
|
|
4346
4392
|
MissingChargeInfo: MissingChargeInfo;
|
|
4347
4393
|
MonthlyVatCharge: ResolverTypeWrapper<IGetChargesByIdsResult>;
|
|
@@ -4512,6 +4558,7 @@ export type ResolversParentTypes = {
|
|
|
4512
4558
|
AdminContextInput: AdminContextInput;
|
|
4513
4559
|
AnnualId: AnnualId;
|
|
4514
4560
|
AnnualIdInput: AnnualIdInput;
|
|
4561
|
+
AutoMatchChargesResult: AutoMatchChargesResult;
|
|
4515
4562
|
BalanceTransactions: IGetNormalizedBalanceTransactionsResult;
|
|
4516
4563
|
BankDeposit: Omit<BankDeposit, 'transactions'> & {
|
|
4517
4564
|
transactions: ReadonlyArray<ResolversParentTypes['Transaction']>;
|
|
@@ -4556,6 +4603,8 @@ export type ResolversParentTypes = {
|
|
|
4556
4603
|
CategorizeIntoExistingBusinessTripExpenseInput: CategorizeIntoExistingBusinessTripExpenseInput;
|
|
4557
4604
|
Charge: ResolversInterfaceTypes<ResolversParentTypes>['Charge'];
|
|
4558
4605
|
ChargeFilter: ChargeFilter;
|
|
4606
|
+
ChargeMatch: ChargeMatch;
|
|
4607
|
+
ChargeMatchesResult: ChargeMatchesResult;
|
|
4559
4608
|
ChargeMetadata: IGetChargesByIdsResult;
|
|
4560
4609
|
ChargeSortBy: ChargeSortBy;
|
|
4561
4610
|
ChargeSuggestions: Omit<ChargeSuggestions, 'tags'> & {
|
|
@@ -4684,6 +4733,7 @@ export type ResolversParentTypes = {
|
|
|
4684
4733
|
MergeChargesByTransactionReferenceResult: Omit<MergeChargesByTransactionReferenceResult, 'charges'> & {
|
|
4685
4734
|
charges?: Maybe<ReadonlyArray<ResolversParentTypes['Charge']>>;
|
|
4686
4735
|
};
|
|
4736
|
+
MergedCharge: MergedCharge;
|
|
4687
4737
|
MiscExpense: IGetExpensesByChargeIdsResult;
|
|
4688
4738
|
MonthlyVatCharge: IGetChargesByIdsResult;
|
|
4689
4739
|
Mutation: {};
|
|
@@ -4928,6 +4978,13 @@ export type AnnualIdResolvers<ContextType = GraphQLModules.Context, ParentType e
|
|
|
4928
4978
|
year?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
|
|
4929
4979
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
4930
4980
|
};
|
|
4981
|
+
export type AutoMatchChargesResultResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['AutoMatchChargesResult'] = ResolversParentTypes['AutoMatchChargesResult']> = {
|
|
4982
|
+
errors?: Resolver<ReadonlyArray<ResolversTypes['String']>, ParentType, ContextType>;
|
|
4983
|
+
mergedCharges?: Resolver<ReadonlyArray<ResolversTypes['MergedCharge']>, ParentType, ContextType>;
|
|
4984
|
+
skippedCharges?: Resolver<ReadonlyArray<ResolversTypes['UUID']>, ParentType, ContextType>;
|
|
4985
|
+
totalMatches?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
|
|
4986
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
4987
|
+
};
|
|
4931
4988
|
export type BalanceTransactionsResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['BalanceTransactions'] = ResolversParentTypes['BalanceTransactions']> = {
|
|
4932
4989
|
amount?: Resolver<ResolversTypes['FinancialAmount'], ParentType, ContextType>;
|
|
4933
4990
|
amountUsd?: Resolver<ResolversTypes['FinancialAmount'], ParentType, ContextType>;
|
|
@@ -5249,6 +5306,15 @@ export type ChargeResolvers<ContextType = GraphQLModules.Context, ParentType ext
|
|
|
5249
5306
|
withholdingTax?: Resolver<Maybe<ResolversTypes['FinancialAmount']>, ParentType, ContextType>;
|
|
5250
5307
|
yearsOfRelevance?: Resolver<Maybe<ReadonlyArray<ResolversTypes['YearOfRelevance']>>, ParentType, ContextType>;
|
|
5251
5308
|
};
|
|
5309
|
+
export type ChargeMatchResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['ChargeMatch'] = ResolversParentTypes['ChargeMatch']> = {
|
|
5310
|
+
chargeId?: Resolver<ResolversTypes['UUID'], ParentType, ContextType>;
|
|
5311
|
+
confidenceScore?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
|
|
5312
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
5313
|
+
};
|
|
5314
|
+
export type ChargeMatchesResultResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['ChargeMatchesResult'] = ResolversParentTypes['ChargeMatchesResult']> = {
|
|
5315
|
+
matches?: Resolver<ReadonlyArray<ResolversTypes['ChargeMatch']>, ParentType, ContextType>;
|
|
5316
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
5317
|
+
};
|
|
5252
5318
|
export type ChargeMetadataResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['ChargeMetadata'] = ResolversParentTypes['ChargeMetadata']> = {
|
|
5253
5319
|
createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
|
|
5254
5320
|
documentsCount?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
|
|
@@ -6148,6 +6214,11 @@ export type MergeChargesByTransactionReferenceResultResolvers<ContextType = Grap
|
|
|
6148
6214
|
success?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
|
|
6149
6215
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
6150
6216
|
};
|
|
6217
|
+
export type MergedChargeResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['MergedCharge'] = ResolversParentTypes['MergedCharge']> = {
|
|
6218
|
+
chargeId?: Resolver<ResolversTypes['UUID'], ParentType, ContextType>;
|
|
6219
|
+
confidenceScore?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
|
|
6220
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
|
6221
|
+
};
|
|
6151
6222
|
export type MiscExpenseResolvers<ContextType = GraphQLModules.Context, ParentType extends ResolversParentTypes['MiscExpense'] = ResolversParentTypes['MiscExpense']> = {
|
|
6152
6223
|
amount?: Resolver<ResolversTypes['FinancialAmount'], ParentType, ContextType>;
|
|
6153
6224
|
charge?: Resolver<ResolversTypes['Charge'], ParentType, ContextType>;
|
|
@@ -6209,6 +6280,7 @@ export type MutationResolvers<ContextType = GraphQLModules.Context, ParentType e
|
|
|
6209
6280
|
addDeelContract?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<MutationAddDeelContractArgs, 'businessId' | 'contractId' | 'contractStartDate' | 'contractorId' | 'contractorName'>>;
|
|
6210
6281
|
addSortCode?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<MutationAddSortCodeArgs, 'key' | 'name'>>;
|
|
6211
6282
|
addTag?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<MutationAddTagArgs, 'name'>>;
|
|
6283
|
+
autoMatchCharges?: Resolver<ResolversTypes['AutoMatchChargesResult'], ParentType, ContextType>;
|
|
6212
6284
|
batchGenerateBusinessesOutOfTransactions?: Resolver<ReadonlyArray<ResolversTypes['Business']>, ParentType, ContextType>;
|
|
6213
6285
|
batchUpdateCharges?: Resolver<ResolversTypes['BatchUpdateChargesResult'], ParentType, ContextType, RequireFields<MutationBatchUpdateChargesArgs, 'chargeIds' | 'fields'>>;
|
|
6214
6286
|
batchUploadDocuments?: Resolver<ReadonlyArray<ResolversTypes['UploadDocumentResult']>, ParentType, ContextType, RequireFields<MutationBatchUploadDocumentsArgs, 'documents'>>;
|
|
@@ -6478,6 +6550,7 @@ export type QueryResolvers<ContextType = GraphQLModules.Context, ParentType exte
|
|
|
6478
6550
|
employeesByEmployerId?: Resolver<ReadonlyArray<ResolversTypes['Employee']>, ParentType, ContextType, RequireFields<QueryEmployeesByEmployerIdArgs, 'employerId'>>;
|
|
6479
6551
|
exchangeRates?: Resolver<Maybe<ResolversTypes['ExchangeRates']>, ParentType, ContextType, Partial<QueryExchangeRatesArgs>>;
|
|
6480
6552
|
financialEntity?: Resolver<ResolversTypes['FinancialEntity'], ParentType, ContextType, RequireFields<QueryFinancialEntityArgs, 'id'>>;
|
|
6553
|
+
findChargeMatches?: Resolver<ResolversTypes['ChargeMatchesResult'], ParentType, ContextType, RequireFields<QueryFindChargeMatchesArgs, 'chargeId'>>;
|
|
6481
6554
|
gmailListenerStatus?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
|
|
6482
6555
|
greenInvoiceClient?: Resolver<ResolversTypes['GreenInvoiceClient'], ParentType, ContextType, RequireFields<QueryGreenInvoiceClientArgs, 'clientId'>>;
|
|
6483
6556
|
incomeExpenseChart?: Resolver<ResolversTypes['IncomeExpenseChart'], ParentType, ContextType, RequireFields<QueryIncomeExpenseChartArgs, 'filters'>>;
|
|
@@ -6963,6 +7036,7 @@ export type Resolvers<ContextType = GraphQLModules.Context> = {
|
|
|
6963
7036
|
AdminBusiness?: AdminBusinessResolvers<ContextType>;
|
|
6964
7037
|
AdminContext?: AdminContextResolvers<ContextType>;
|
|
6965
7038
|
AnnualId?: AnnualIdResolvers<ContextType>;
|
|
7039
|
+
AutoMatchChargesResult?: AutoMatchChargesResultResolvers<ContextType>;
|
|
6966
7040
|
BalanceTransactions?: BalanceTransactionsResolvers<ContextType>;
|
|
6967
7041
|
BankDeposit?: BankDepositResolvers<ContextType>;
|
|
6968
7042
|
BankDepositCharge?: BankDepositChargeResolvers<ContextType>;
|
|
@@ -6990,6 +7064,8 @@ export type Resolvers<ContextType = GraphQLModules.Context> = {
|
|
|
6990
7064
|
BusinessTripTravelAndSubsistenceExpense?: BusinessTripTravelAndSubsistenceExpenseResolvers<ContextType>;
|
|
6991
7065
|
CardFinancialAccount?: CardFinancialAccountResolvers<ContextType>;
|
|
6992
7066
|
Charge?: ChargeResolvers<ContextType>;
|
|
7067
|
+
ChargeMatch?: ChargeMatchResolvers<ContextType>;
|
|
7068
|
+
ChargeMatchesResult?: ChargeMatchesResultResolvers<ContextType>;
|
|
6993
7069
|
ChargeMetadata?: ChargeMetadataResolvers<ContextType>;
|
|
6994
7070
|
ChargeSortByField?: ChargeSortByFieldResolvers;
|
|
6995
7071
|
ChargeSuggestions?: ChargeSuggestionsResolvers<ContextType>;
|
|
@@ -7072,6 +7148,7 @@ export type Resolvers<ContextType = GraphQLModules.Context> = {
|
|
|
7072
7148
|
MergeChargeResult?: MergeChargeResultResolvers<ContextType>;
|
|
7073
7149
|
MergeChargeSuccessfulResult?: MergeChargeSuccessfulResultResolvers<ContextType>;
|
|
7074
7150
|
MergeChargesByTransactionReferenceResult?: MergeChargesByTransactionReferenceResultResolvers<ContextType>;
|
|
7151
|
+
MergedCharge?: MergedChargeResolvers<ContextType>;
|
|
7075
7152
|
MiscExpense?: MiscExpenseResolvers<ContextType>;
|
|
7076
7153
|
MissingChargeInfo?: MissingChargeInfoResolvers;
|
|
7077
7154
|
MonthlyVatCharge?: MonthlyVatChargeResolvers<ContextType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/__generated__/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/__generated__/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAm5BrD,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAyX7B,OAAO,EAAE,QAAQ,EAAE,CAAC;AAuLpB,OAAO,EAAE,YAAY,EAAE,CAAC;AAomCxB,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAw6D7B,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as Types from "../../../__generated__/types.js";
|
|
2
|
+
import * as gm from "graphql-modules";
|
|
3
|
+
export declare namespace ChargesMatcherModule {
|
|
4
|
+
interface DefinedFields {
|
|
5
|
+
Query: 'findChargeMatches';
|
|
6
|
+
Mutation: 'autoMatchCharges';
|
|
7
|
+
ChargeMatchesResult: 'matches';
|
|
8
|
+
ChargeMatch: 'chargeId' | 'confidenceScore';
|
|
9
|
+
AutoMatchChargesResult: 'totalMatches' | 'mergedCharges' | 'skippedCharges' | 'errors';
|
|
10
|
+
MergedCharge: 'chargeId' | 'confidenceScore';
|
|
11
|
+
}
|
|
12
|
+
export type Query = Pick<Types.Query, DefinedFields['Query']>;
|
|
13
|
+
export type ChargeMatchesResult = Pick<Types.ChargeMatchesResult, DefinedFields['ChargeMatchesResult']>;
|
|
14
|
+
export type UUID = Types.Uuid;
|
|
15
|
+
export type Mutation = Pick<Types.Mutation, DefinedFields['Mutation']>;
|
|
16
|
+
export type AutoMatchChargesResult = Pick<Types.AutoMatchChargesResult, DefinedFields['AutoMatchChargesResult']>;
|
|
17
|
+
export type ChargeMatch = Pick<Types.ChargeMatch, DefinedFields['ChargeMatch']>;
|
|
18
|
+
export type MergedCharge = Pick<Types.MergedCharge, DefinedFields['MergedCharge']>;
|
|
19
|
+
export type QueryResolvers = Pick<Types.QueryResolvers, DefinedFields['Query']>;
|
|
20
|
+
export type MutationResolvers = Pick<Types.MutationResolvers, DefinedFields['Mutation']>;
|
|
21
|
+
export type ChargeMatchesResultResolvers = Pick<Types.ChargeMatchesResultResolvers, DefinedFields['ChargeMatchesResult']>;
|
|
22
|
+
export type ChargeMatchResolvers = Pick<Types.ChargeMatchResolvers, DefinedFields['ChargeMatch']>;
|
|
23
|
+
export type AutoMatchChargesResultResolvers = Pick<Types.AutoMatchChargesResultResolvers, DefinedFields['AutoMatchChargesResult']>;
|
|
24
|
+
export type MergedChargeResolvers = Pick<Types.MergedChargeResolvers, DefinedFields['MergedCharge']>;
|
|
25
|
+
export interface Resolvers {
|
|
26
|
+
Query?: QueryResolvers;
|
|
27
|
+
Mutation?: MutationResolvers;
|
|
28
|
+
ChargeMatchesResult?: ChargeMatchesResultResolvers;
|
|
29
|
+
ChargeMatch?: ChargeMatchResolvers;
|
|
30
|
+
AutoMatchChargesResult?: AutoMatchChargesResultResolvers;
|
|
31
|
+
MergedCharge?: MergedChargeResolvers;
|
|
32
|
+
}
|
|
33
|
+
export interface MiddlewareMap {
|
|
34
|
+
'*'?: {
|
|
35
|
+
'*'?: gm.Middleware[];
|
|
36
|
+
};
|
|
37
|
+
Query?: {
|
|
38
|
+
'*'?: gm.Middleware[];
|
|
39
|
+
findChargeMatches?: gm.Middleware[];
|
|
40
|
+
};
|
|
41
|
+
Mutation?: {
|
|
42
|
+
'*'?: gm.Middleware[];
|
|
43
|
+
autoMatchCharges?: gm.Middleware[];
|
|
44
|
+
};
|
|
45
|
+
ChargeMatchesResult?: {
|
|
46
|
+
'*'?: gm.Middleware[];
|
|
47
|
+
matches?: gm.Middleware[];
|
|
48
|
+
};
|
|
49
|
+
ChargeMatch?: {
|
|
50
|
+
'*'?: gm.Middleware[];
|
|
51
|
+
chargeId?: gm.Middleware[];
|
|
52
|
+
confidenceScore?: gm.Middleware[];
|
|
53
|
+
};
|
|
54
|
+
AutoMatchChargesResult?: {
|
|
55
|
+
'*'?: gm.Middleware[];
|
|
56
|
+
totalMatches?: gm.Middleware[];
|
|
57
|
+
mergedCharges?: gm.Middleware[];
|
|
58
|
+
skippedCharges?: gm.Middleware[];
|
|
59
|
+
errors?: gm.Middleware[];
|
|
60
|
+
};
|
|
61
|
+
MergedCharge?: {
|
|
62
|
+
'*'?: gm.Middleware[];
|
|
63
|
+
chargeId?: gm.Middleware[];
|
|
64
|
+
confidenceScore?: gm.Middleware[];
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export {};
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__generated__/types.ts"],"names":[],"mappings":"AAEA,MAAM,KAAW,oBAAoB,CAoEpC;AApED,WAAiB,oBAAoB;IAQlC,CAAC;IAwBD,CAAC;IAmCD,CAAC;AACJ,CAAC,EApEgB,oBAAoB,KAApB,oBAAoB,QAoEpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { calculateAmountConfidence } from '../helpers/amount-confidence.helper.js';
|
|
3
|
+
describe('calculateAmountConfidence', () => {
|
|
4
|
+
describe('exact matches', () => {
|
|
5
|
+
it('should return 1.0 for exact match with positive amounts', () => {
|
|
6
|
+
expect(calculateAmountConfidence(100, 100)).toBe(1.0);
|
|
7
|
+
expect(calculateAmountConfidence(50.5, 50.5)).toBe(1.0);
|
|
8
|
+
expect(calculateAmountConfidence(0.01, 0.01)).toBe(1.0);
|
|
9
|
+
});
|
|
10
|
+
it('should return 1.0 for exact match with negative amounts', () => {
|
|
11
|
+
expect(calculateAmountConfidence(-100, -100)).toBe(1.0);
|
|
12
|
+
expect(calculateAmountConfidence(-50.5, -50.5)).toBe(1.0);
|
|
13
|
+
});
|
|
14
|
+
it('should return 1.0 for zero amounts', () => {
|
|
15
|
+
expect(calculateAmountConfidence(0, 0)).toBe(1.0);
|
|
16
|
+
});
|
|
17
|
+
it('should return 1.0 for matching absolute values with different signs', () => {
|
|
18
|
+
// Since we compare absolute values, sign differences shouldn't matter for exact amounts
|
|
19
|
+
expect(calculateAmountConfidence(100, 100)).toBe(1.0);
|
|
20
|
+
expect(calculateAmountConfidence(-100, -100)).toBe(1.0);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('amounts within 1 unit', () => {
|
|
24
|
+
it('should return 0.9 for amounts within 0.5 units', () => {
|
|
25
|
+
expect(calculateAmountConfidence(100, 100.5)).toBe(0.9);
|
|
26
|
+
expect(calculateAmountConfidence(100.5, 100)).toBe(0.9);
|
|
27
|
+
expect(calculateAmountConfidence(50, 50.3)).toBe(0.9);
|
|
28
|
+
});
|
|
29
|
+
it('should return 0.9 for amounts at exactly 1 unit difference', () => {
|
|
30
|
+
expect(calculateAmountConfidence(100, 101)).toBe(0.9);
|
|
31
|
+
expect(calculateAmountConfidence(101, 100)).toBe(0.9);
|
|
32
|
+
expect(calculateAmountConfidence(50, 51)).toBe(0.9);
|
|
33
|
+
});
|
|
34
|
+
it('should return 0.9 for amounts just under 1 unit difference', () => {
|
|
35
|
+
expect(calculateAmountConfidence(100, 100.99)).toBe(0.9);
|
|
36
|
+
expect(calculateAmountConfidence(100.99, 100)).toBe(0.9);
|
|
37
|
+
});
|
|
38
|
+
it('should return 0.9 for negative amounts within 1 unit', () => {
|
|
39
|
+
expect(calculateAmountConfidence(-100, -100.5)).toBe(0.9);
|
|
40
|
+
expect(calculateAmountConfidence(-100, -101)).toBe(0.9);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('amounts with differences between 1 unit and 20%', () => {
|
|
44
|
+
it('should return value between 0.0 and 0.7 for 1.5 units difference', () => {
|
|
45
|
+
const confidence = calculateAmountConfidence(100, 101.5);
|
|
46
|
+
expect(confidence).toBeGreaterThan(0.0);
|
|
47
|
+
expect(confidence).toBeLessThan(0.7);
|
|
48
|
+
});
|
|
49
|
+
it('should return value between 0.0 and 0.7 for 2 units difference', () => {
|
|
50
|
+
const confidence = calculateAmountConfidence(100, 102);
|
|
51
|
+
expect(confidence).toBeGreaterThan(0.0);
|
|
52
|
+
expect(confidence).toBeLessThan(0.7);
|
|
53
|
+
});
|
|
54
|
+
it('should return value between 0.0 and 0.7 for 5 units difference (on 100)', () => {
|
|
55
|
+
const confidence = calculateAmountConfidence(100, 105);
|
|
56
|
+
expect(confidence).toBeGreaterThan(0.0);
|
|
57
|
+
expect(confidence).toBeLessThan(0.7);
|
|
58
|
+
// 5% difference should be roughly in the middle
|
|
59
|
+
expect(confidence).toBeGreaterThan(0.3);
|
|
60
|
+
});
|
|
61
|
+
it('should return value between 0.0 and 0.7 for 10 units difference (on 100)', () => {
|
|
62
|
+
const confidence = calculateAmountConfidence(100, 110);
|
|
63
|
+
expect(confidence).toBeGreaterThan(0.0);
|
|
64
|
+
expect(confidence).toBeLessThan(0.7);
|
|
65
|
+
// 10% difference should be lower
|
|
66
|
+
expect(confidence).toBeLessThan(0.4);
|
|
67
|
+
});
|
|
68
|
+
it('should demonstrate linear degradation', () => {
|
|
69
|
+
// For amounts where 1 unit = 1%, we can test linear degradation more precisely
|
|
70
|
+
// Starting from just over 1% to just under 20%
|
|
71
|
+
// At around 1% (just over 1 unit on 100): should be close to 0.7
|
|
72
|
+
const conf1 = calculateAmountConfidence(100, 101.5); // 1.5%
|
|
73
|
+
// At around 10% (middle of range): should be around 0.35
|
|
74
|
+
const conf10 = calculateAmountConfidence(100, 110); // 10%
|
|
75
|
+
// At around 19% (near end): should be close to 0.0
|
|
76
|
+
const conf19 = calculateAmountConfidence(100, 119); // 19%
|
|
77
|
+
// Verify degradation order
|
|
78
|
+
expect(conf1).toBeGreaterThan(conf10);
|
|
79
|
+
expect(conf10).toBeGreaterThan(conf19);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('amounts at exactly 20% difference', () => {
|
|
83
|
+
it('should return 0.0 for exactly 20% difference', () => {
|
|
84
|
+
expect(calculateAmountConfidence(100, 120)).toBe(0.0);
|
|
85
|
+
expect(calculateAmountConfidence(120, 100)).toBe(0.0);
|
|
86
|
+
expect(calculateAmountConfidence(50, 60)).toBe(0.0);
|
|
87
|
+
});
|
|
88
|
+
it('should return 0.0 for just under 20% difference (19.99%)', () => {
|
|
89
|
+
// Just under 20% should still be very close to 0
|
|
90
|
+
const confidence = calculateAmountConfidence(100, 119.9);
|
|
91
|
+
expect(confidence).toBeLessThanOrEqual(0.01);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('amounts beyond 20% difference', () => {
|
|
95
|
+
it('should return 0.0 for 25% difference', () => {
|
|
96
|
+
expect(calculateAmountConfidence(100, 125)).toBe(0.0);
|
|
97
|
+
});
|
|
98
|
+
it('should return 0.0 for 50% difference', () => {
|
|
99
|
+
expect(calculateAmountConfidence(100, 150)).toBe(0.0);
|
|
100
|
+
});
|
|
101
|
+
it('should return 0.0 for 100% difference', () => {
|
|
102
|
+
expect(calculateAmountConfidence(100, 200)).toBe(0.0);
|
|
103
|
+
});
|
|
104
|
+
it('should return 0.0 for very large differences', () => {
|
|
105
|
+
expect(calculateAmountConfidence(100, 1000)).toBe(0.0);
|
|
106
|
+
expect(calculateAmountConfidence(10, 500)).toBe(0.0);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('edge cases with negative amounts', () => {
|
|
110
|
+
it('should handle negative transaction amount', () => {
|
|
111
|
+
expect(calculateAmountConfidence(-100, -100)).toBe(1.0);
|
|
112
|
+
expect(calculateAmountConfidence(-100, -101)).toBe(0.9);
|
|
113
|
+
expect(calculateAmountConfidence(-100, -105)).toBeGreaterThan(0.0);
|
|
114
|
+
expect(calculateAmountConfidence(-100, -120)).toBe(0.0);
|
|
115
|
+
});
|
|
116
|
+
it('should handle negative document amount', () => {
|
|
117
|
+
expect(calculateAmountConfidence(-100, -100)).toBe(1.0);
|
|
118
|
+
expect(calculateAmountConfidence(-101, -100)).toBe(0.9);
|
|
119
|
+
});
|
|
120
|
+
it('should handle both amounts negative', () => {
|
|
121
|
+
expect(calculateAmountConfidence(-50, -50.5)).toBe(0.9);
|
|
122
|
+
expect(calculateAmountConfidence(-100, -110)).toBeGreaterThan(0.0);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('edge cases with very small amounts', () => {
|
|
126
|
+
it('should handle very small amounts correctly', () => {
|
|
127
|
+
expect(calculateAmountConfidence(0.1, 0.1)).toBe(1.0);
|
|
128
|
+
expect(calculateAmountConfidence(0.01, 0.01)).toBe(1.0);
|
|
129
|
+
});
|
|
130
|
+
it('should return 0.9 for small amounts within 1 unit', () => {
|
|
131
|
+
// Even though 1 unit is huge compared to 0.1, it should still return 0.9
|
|
132
|
+
expect(calculateAmountConfidence(0.1, 1.0)).toBe(0.9);
|
|
133
|
+
expect(calculateAmountConfidence(0.5, 1.5)).toBe(0.9);
|
|
134
|
+
});
|
|
135
|
+
it('should handle small amounts with percentage differences correctly', () => {
|
|
136
|
+
// 0.1 to 0.12 has a difference of 0.02, which is within 1 unit, so returns 0.9
|
|
137
|
+
expect(calculateAmountConfidence(0.1, 0.12)).toBe(0.9);
|
|
138
|
+
// 0.1 to 0.11 has a difference of 0.01, which is within 1 unit, so returns 0.9
|
|
139
|
+
expect(calculateAmountConfidence(0.1, 0.11)).toBe(0.9);
|
|
140
|
+
// 0.1 to 1.2 has >1 unit difference (1.1) and is also >20%, so returns 0.0
|
|
141
|
+
expect(calculateAmountConfidence(0.1, 1.2)).toBe(0.0);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('edge cases with zero', () => {
|
|
145
|
+
it('should handle zero in transaction amount', () => {
|
|
146
|
+
expect(calculateAmountConfidence(0, 0)).toBe(1.0);
|
|
147
|
+
});
|
|
148
|
+
it('should handle zero vs non-zero amounts', () => {
|
|
149
|
+
// 0 to 1 is within 1 unit
|
|
150
|
+
expect(calculateAmountConfidence(0, 1)).toBe(0.9);
|
|
151
|
+
expect(calculateAmountConfidence(1, 0)).toBe(0.9);
|
|
152
|
+
// 0 to >1 means one amount is 0, which makes percentage calculation undefined
|
|
153
|
+
// The spec requires us to handle this gracefully - since we can't calculate percentage
|
|
154
|
+
// and the difference is >1, we return 0.0
|
|
155
|
+
expect(calculateAmountConfidence(0, 2)).toBe(0.0);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('formula verification for linear degradation', () => {
|
|
159
|
+
it('should verify the linear formula in the middle range', () => {
|
|
160
|
+
// Using base amount of 100 for easier percentage calculation
|
|
161
|
+
// 1 unit = 1% on 100
|
|
162
|
+
// Range is from 1% to 20%
|
|
163
|
+
// Confidence degrades linearly from 0.7 to 0.0
|
|
164
|
+
// At 1% (101): should be close to 0.7 (but we're just over 1 unit)
|
|
165
|
+
const conf1 = calculateAmountConfidence(100, 101.01);
|
|
166
|
+
expect(conf1).toBeCloseTo(0.7, 1);
|
|
167
|
+
// At 10.5% (halfway between 1% and 20%): should be around 0.35
|
|
168
|
+
const conf10_5 = calculateAmountConfidence(100, 110.5);
|
|
169
|
+
expect(conf10_5).toBeCloseTo(0.35, 1);
|
|
170
|
+
// At 19.9% (just before 20%): should be close to 0.0
|
|
171
|
+
const conf19_9 = calculateAmountConfidence(100, 119.9);
|
|
172
|
+
expect(conf19_9).toBeCloseTo(0.0, 1);
|
|
173
|
+
});
|
|
174
|
+
it('should verify degradation is proportional across the range', () => {
|
|
175
|
+
// Calculate several points and verify linear relationship
|
|
176
|
+
const base = 100;
|
|
177
|
+
// Points at different percentages in the degradation range
|
|
178
|
+
const conf_2pct = calculateAmountConfidence(base, 102); // ~2%
|
|
179
|
+
const conf_5pct = calculateAmountConfidence(base, 105); // 5%
|
|
180
|
+
const conf_10pct = calculateAmountConfidence(base, 110); // 10%
|
|
181
|
+
const conf_15pct = calculateAmountConfidence(base, 115); // 15%
|
|
182
|
+
// Each should be progressively smaller
|
|
183
|
+
expect(conf_2pct).toBeGreaterThan(conf_5pct);
|
|
184
|
+
expect(conf_5pct).toBeGreaterThan(conf_10pct);
|
|
185
|
+
expect(conf_10pct).toBeGreaterThan(conf_15pct);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('return value precision', () => {
|
|
189
|
+
it('should return values rounded to 2 decimal places', () => {
|
|
190
|
+
const confidence = calculateAmountConfidence(100, 105);
|
|
191
|
+
// Check that the value has at most 2 decimal places
|
|
192
|
+
const decimalPlaces = (confidence.toString().split('.')[1] || '').length;
|
|
193
|
+
expect(decimalPlaces).toBeLessThanOrEqual(2);
|
|
194
|
+
});
|
|
195
|
+
it('should handle rounding correctly for edge values', () => {
|
|
196
|
+
// Test various amounts that might produce values needing rounding
|
|
197
|
+
const amounts = [
|
|
198
|
+
[100, 102.5],
|
|
199
|
+
[100, 107.3],
|
|
200
|
+
[100, 113.7],
|
|
201
|
+
[50, 53.3],
|
|
202
|
+
];
|
|
203
|
+
amounts.forEach(([amt1, amt2]) => {
|
|
204
|
+
const confidence = calculateAmountConfidence(amt1, amt2);
|
|
205
|
+
const decimalPlaces = (confidence.toString().split('.')[1] || '').length;
|
|
206
|
+
expect(decimalPlaces).toBeLessThanOrEqual(2);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('symmetry', () => {
|
|
211
|
+
it('should return same confidence regardless of parameter order', () => {
|
|
212
|
+
expect(calculateAmountConfidence(100, 105)).toBe(calculateAmountConfidence(105, 100));
|
|
213
|
+
expect(calculateAmountConfidence(50, 60)).toBe(calculateAmountConfidence(60, 50));
|
|
214
|
+
expect(calculateAmountConfidence(100, 101)).toBe(calculateAmountConfidence(101, 100));
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
//# sourceMappingURL=amount-confidence.test.js.map
|