@accounter/server 0.0.9-alpha-20251217093036-7168648b507d62946aa287af4ea690b73b077b2d → 0.0.9-alpha-20251217131153-65f961a4072436d7f1042ea8ea4d96534cb3650e

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +16 -8
  2. package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js +45 -122
  3. package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js.map +1 -1
  4. package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js +45 -29
  5. package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js.map +1 -1
  6. package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js +2 -11
  7. package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js.map +1 -1
  8. package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js +25 -0
  9. package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js.map +1 -1
  10. package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.js.map +1 -1
  11. package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js +65 -64
  12. package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js.map +1 -1
  13. package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js +494 -60
  14. package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js.map +1 -1
  15. package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js +34 -98
  16. package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js.map +1 -1
  17. package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js +79 -59
  18. package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js.map +1 -1
  19. package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js +6 -4
  20. package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js.map +1 -1
  21. package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.d.ts +9 -2
  22. package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js +24 -2
  23. package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js.map +1 -1
  24. package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.d.ts +1 -4
  25. package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js +2 -1
  26. package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js.map +1 -1
  27. package/dist/server/src/modules/charges-matcher/index.d.ts +0 -1
  28. package/dist/server/src/modules/charges-matcher/index.js +0 -1
  29. package/dist/server/src/modules/charges-matcher/index.js.map +1 -1
  30. package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.d.ts +2 -1
  31. package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js +2 -2
  32. package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js.map +1 -1
  33. package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js +2 -2
  34. package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js.map +1 -1
  35. package/dist/server/src/modules/charges-matcher/providers/document-aggregator.d.ts +4 -5
  36. package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js +5 -4
  37. package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js.map +1 -1
  38. package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.d.ts +5 -3
  39. package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js +70 -13
  40. package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js.map +1 -1
  41. package/dist/server/src/modules/charges-matcher/providers/single-match.provider.d.ts +4 -2
  42. package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js +15 -7
  43. package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js.map +1 -1
  44. package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.d.ts +1 -1
  45. package/dist/server/src/modules/charges-matcher/types.d.ts +2 -4
  46. package/dist/server/src/modules/charges-matcher/types.js.map +1 -1
  47. package/package.json +2 -2
  48. package/src/modules/charges-matcher/README.md +14 -3
  49. package/src/modules/charges-matcher/__tests__/auto-match-integration.test.ts +52 -100
  50. package/src/modules/charges-matcher/__tests__/auto-match.test.ts +51 -29
  51. package/src/modules/charges-matcher/__tests__/charge-validator.test.ts +2 -13
  52. package/src/modules/charges-matcher/__tests__/date-confidence.test.ts +29 -0
  53. package/src/modules/charges-matcher/__tests__/document-aggregator.test.ts +0 -1
  54. package/src/modules/charges-matcher/__tests__/document-amount.test.ts +66 -65
  55. package/src/modules/charges-matcher/__tests__/match-scorer.test.ts +552 -60
  56. package/src/modules/charges-matcher/__tests__/single-match-integration.test.ts +43 -73
  57. package/src/modules/charges-matcher/__tests__/single-match.test.ts +81 -59
  58. package/src/modules/charges-matcher/documentation/SPEC.md +276 -4
  59. package/src/modules/charges-matcher/helpers/charge-validator.helper.ts +7 -5
  60. package/src/modules/charges-matcher/helpers/date-confidence.helper.ts +32 -2
  61. package/src/modules/charges-matcher/helpers/document-amount.helper.ts +2 -12
  62. package/src/modules/charges-matcher/index.ts +0 -1
  63. package/src/modules/charges-matcher/providers/auto-match.provider.ts +5 -3
  64. package/src/modules/charges-matcher/providers/charges-matcher.provider.ts +8 -2
  65. package/src/modules/charges-matcher/providers/document-aggregator.ts +12 -11
  66. package/src/modules/charges-matcher/providers/match-scorer.provider.ts +97 -17
  67. package/src/modules/charges-matcher/providers/single-match.provider.ts +21 -8
  68. package/src/modules/charges-matcher/providers/transaction-aggregator.ts +1 -1
  69. package/src/modules/charges-matcher/types.ts +2 -5
@@ -1,10 +1,30 @@
1
- import { describe, expect, it } from 'vitest';
1
+ import { describe, expect, it, vi } from 'vitest';
2
2
  import { findMatches, } from '../providers/single-match.provider.js';
3
3
  import { createMockTransaction, createMockDocument } from './test-helpers.js';
4
+ // Mock DI system and ClientsProvider
5
+ vi.mock('../../financial-entities/providers/clients.provider.js', () => ({
6
+ ClientsProvider: class {
7
+ },
8
+ }));
4
9
  // Test user and business IDs
5
10
  const USER_ID = 'user-123';
6
11
  const BUSINESS_A = 'business-a';
7
12
  const BUSINESS_B = 'business-b';
13
+ // Create a mock injector for testing
14
+ const createMockInjector = () => ({
15
+ get: vi.fn((token) => {
16
+ if (token.name === 'ClientsProvider')
17
+ return {
18
+ getClientByIdLoader: {
19
+ load: (businessId) => {
20
+ const isRegisteredClient = businessId.startsWith('client-');
21
+ return Promise.resolve(isRegisteredClient ? { id: businessId } : null);
22
+ },
23
+ },
24
+ };
25
+ return null;
26
+ }),
27
+ });
8
28
  // Helper to create transaction charge
9
29
  function createTxCharge(chargeId, transactions) {
10
30
  return {
@@ -22,7 +42,7 @@ function createDocCharge(chargeId, documents) {
22
42
  describe('Single-Match Provider', () => {
23
43
  describe('findMatches', () => {
24
44
  describe('Valid Transaction Charge → Finds Document Matches', () => {
25
- it('should find matching document charges for transaction charge', () => {
45
+ it('should find matching document charges for transaction charge', async () => {
26
46
  const sourceCharge = createTxCharge('tx-charge-1', [
27
47
  createMockTransaction({
28
48
  amount: "100",
@@ -46,26 +66,26 @@ describe('Single-Match Provider', () => {
46
66
  }),
47
67
  ]),
48
68
  ];
49
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
69
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
50
70
  expect(results).toHaveLength(2);
51
71
  expect(results[0].chargeId).toBe('doc-charge-1'); // Perfect match
52
72
  expect(results[0].confidenceScore).toBeGreaterThan(0.95);
53
73
  expect(results[1].chargeId).toBe('doc-charge-2'); // Partial match
54
74
  expect(results[1].confidenceScore).toBeLessThan(0.95);
55
75
  });
56
- it('should exclude transaction candidates when source is transaction', () => {
76
+ it('should exclude transaction candidates when source is transaction', async () => {
57
77
  const sourceCharge = createTxCharge('tx-charge-1', [createMockTransaction()]);
58
78
  const candidateCharges = [
59
79
  createTxCharge('tx-charge-2', [createMockTransaction()]), // Should be excluded
60
80
  createDocCharge('doc-charge-1', [createMockDocument()]), // Should be included
61
81
  ];
62
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
82
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
63
83
  expect(results).toHaveLength(1);
64
84
  expect(results[0].chargeId).toBe('doc-charge-1');
65
85
  });
66
86
  });
67
87
  describe('Valid Document Charge → Finds Transaction Matches', () => {
68
- it('should find matching transaction charges for document charge', () => {
88
+ it('should find matching transaction charges for document charge', async () => {
69
89
  const sourceCharge = createDocCharge('doc-charge-1', [
70
90
  createMockDocument({
71
91
  total_amount: 100,
@@ -89,81 +109,81 @@ describe('Single-Match Provider', () => {
89
109
  }),
90
110
  ]),
91
111
  ];
92
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
112
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
93
113
  expect(results).toHaveLength(2);
94
114
  expect(results[0].chargeId).toBe('tx-charge-1'); // Perfect match
95
115
  expect(results[1].chargeId).toBe('tx-charge-2'); // Partial match
96
116
  });
97
- it('should exclude document candidates when source is document', () => {
117
+ it('should exclude document candidates when source is document', async () => {
98
118
  const sourceCharge = createDocCharge('doc-charge-1', [createMockDocument()]);
99
119
  const candidateCharges = [
100
120
  createDocCharge('doc-charge-2', [createMockDocument()]), // Should be excluded
101
121
  createTxCharge('tx-charge-1', [createMockTransaction()]), // Should be included
102
122
  ];
103
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
123
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
104
124
  expect(results).toHaveLength(1);
105
125
  expect(results[0].chargeId).toBe('tx-charge-1');
106
126
  });
107
127
  });
108
128
  describe('Matched Charge Input → Throws Error', () => {
109
- it('should throw error if source has both transactions and documents', () => {
129
+ it('should throw error if source has both transactions and documents', async () => {
110
130
  const matchedCharge = {
111
131
  chargeId: 'matched-charge',
112
132
  transactions: [createMockTransaction()],
113
133
  documents: [createMockDocument()],
114
134
  };
115
- expect(() => findMatches(matchedCharge, [], USER_ID)).toThrow(/already matched.*both transactions and documents/);
135
+ await expect(findMatches(matchedCharge, [], USER_ID, createMockInjector())).rejects.toThrow(/already matched.*both transactions and documents/);
116
136
  });
117
- it('should throw error if source has neither transactions nor documents', () => {
137
+ it('should throw error if source has neither transactions nor documents', async () => {
118
138
  const emptyCharge = {
119
139
  chargeId: 'empty-charge',
120
140
  transactions: [],
121
141
  documents: [],
122
142
  };
123
- expect(() => findMatches(emptyCharge, [], USER_ID)).toThrow(/no transactions or documents/);
143
+ await expect(findMatches(emptyCharge, [], USER_ID, createMockInjector())).rejects.toThrow(/no transactions or documents/);
124
144
  });
125
145
  });
126
146
  describe('Multiple Currencies in Source → Error Propagates', () => {
127
- it('should throw error for source with mixed currencies', () => {
147
+ it('should throw error for source with mixed currencies', async () => {
128
148
  const mixedCurrencyCharge = createTxCharge('tx-charge-1', [
129
149
  createMockTransaction({ currency: 'USD' }),
130
150
  createMockTransaction({ currency: 'EUR' }),
131
151
  ]);
132
- expect(() => findMatches(mixedCurrencyCharge, [], USER_ID)).toThrow(/failed validation.*multiple currencies/);
152
+ await expect(findMatches(mixedCurrencyCharge, [], USER_ID, createMockInjector())).rejects.toThrow(/failed validation.*multiple currencies/);
133
153
  });
134
- it('should throw error for source with multiple business IDs', () => {
154
+ it('should throw error for source with multiple business IDs', async () => {
135
155
  const mixedBusinessCharge = createTxCharge('tx-charge-1', [
136
156
  createMockTransaction({ business_id: BUSINESS_A }),
137
157
  createMockTransaction({ business_id: BUSINESS_B }),
138
158
  ]);
139
- expect(() => findMatches(mixedBusinessCharge, [], USER_ID)).toThrow(/failed validation.*multiple business/);
159
+ await expect(findMatches(mixedBusinessCharge, [], USER_ID, createMockInjector())).rejects.toThrow(/failed validation.*multiple business/);
140
160
  });
141
- it('should throw error for source document with invalid business extraction', () => {
161
+ it('should throw error for source document with invalid business extraction', async () => {
142
162
  const invalidDocCharge = createDocCharge('doc-charge-1', [
143
163
  createMockDocument({
144
164
  creditor_id: 'other-user',
145
165
  debtor_id: 'another-user',
146
166
  }),
147
167
  ]);
148
- expect(() => findMatches(invalidDocCharge, [], USER_ID)).toThrow(/failed validation/);
168
+ await expect(findMatches(invalidDocCharge, [], USER_ID, createMockInjector())).rejects.toThrow(/failed validation/);
149
169
  });
150
170
  });
151
171
  describe('No Candidates Found → Empty Array', () => {
152
- it('should return empty array when no candidates provided', () => {
172
+ it('should return empty array when no candidates provided', async () => {
153
173
  const sourceCharge = createTxCharge('tx-charge-1', [createMockTransaction()]);
154
- const results = findMatches(sourceCharge, [], USER_ID);
174
+ const results = await findMatches(sourceCharge, [], USER_ID, createMockInjector());
155
175
  expect(results).toEqual([]);
156
176
  });
157
- it('should return empty array when all candidates are same type', () => {
177
+ it('should return empty array when all candidates are same type', async () => {
158
178
  const sourceCharge = createTxCharge('tx-charge-1', [createMockTransaction()]);
159
179
  const candidateCharges = [
160
180
  createTxCharge('tx-charge-2', [createMockTransaction()]),
161
181
  createTxCharge('tx-charge-3', [createMockTransaction()]),
162
182
  ];
163
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
183
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
164
184
  expect(results).toEqual([]);
165
185
  });
166
- it('should return empty array when all candidates outside date window', () => {
186
+ it('should return empty array when all candidates outside date window', async () => {
167
187
  const sourceCharge = createTxCharge('tx-charge-1', [
168
188
  createMockTransaction({ event_date: new Date('2024-01-15') }),
169
189
  ]);
@@ -175,10 +195,10 @@ describe('Single-Match Provider', () => {
175
195
  createMockDocument({ date: new Date('2025-02-01') }), // 1 year after
176
196
  ]),
177
197
  ];
178
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
198
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
179
199
  expect(results).toEqual([]);
180
200
  });
181
- it('should return empty array when all candidates fail scoring', () => {
201
+ it('should return empty array when all candidates fail scoring', async () => {
182
202
  const sourceCharge = createTxCharge('tx-charge-1', [
183
203
  createMockTransaction({ currency: 'USD' }),
184
204
  ]);
@@ -189,22 +209,22 @@ describe('Single-Match Provider', () => {
189
209
  createMockDocument({ currency_code: 'EUR' }),
190
210
  ]),
191
211
  ];
192
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
212
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
193
213
  expect(results).toEqual([]);
194
214
  });
195
215
  });
196
216
  describe('Candidate Count Handling', () => {
197
- it('should return all candidates when fewer than 5', () => {
217
+ it('should return all candidates when fewer than 5', async () => {
198
218
  const sourceCharge = createTxCharge('tx-charge-1', [createMockTransaction()]);
199
219
  const candidateCharges = [
200
220
  createDocCharge('doc-charge-1', [createMockDocument()]),
201
221
  createDocCharge('doc-charge-2', [createMockDocument()]),
202
222
  createDocCharge('doc-charge-3', [createMockDocument()]),
203
223
  ];
204
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
224
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
205
225
  expect(results).toHaveLength(3);
206
226
  });
207
- it('should return top 5 when more than 5 candidates', () => {
227
+ it('should return top 5 when more than 5 candidates', async () => {
208
228
  const sourceCharge = createTxCharge('tx-charge-1', [
209
229
  createMockTransaction({ amount: "100" }),
210
230
  ]);
@@ -217,11 +237,11 @@ describe('Single-Match Provider', () => {
217
237
  createDocCharge('doc-charge-6', [createMockDocument({ total_amount: 105 })]),
218
238
  createDocCharge('doc-charge-7', [createMockDocument({ total_amount: 106 })]),
219
239
  ];
220
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
240
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
221
241
  expect(results).toHaveLength(5);
222
242
  expect(results[0].chargeId).toBe('doc-charge-1'); // Best match
223
243
  });
224
- it('should respect custom maxMatches option', () => {
244
+ it('should respect custom maxMatches option', async () => {
225
245
  const sourceCharge = createTxCharge('tx-charge-1', [createMockTransaction()]);
226
246
  const candidateCharges = [
227
247
  createDocCharge('doc-charge-1', [createMockDocument()]),
@@ -230,12 +250,12 @@ describe('Single-Match Provider', () => {
230
250
  createDocCharge('doc-charge-4', [createMockDocument()]),
231
251
  createDocCharge('doc-charge-5', [createMockDocument()]),
232
252
  ];
233
- const results = findMatches(sourceCharge, candidateCharges, USER_ID, { maxMatches: 3 });
253
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector(), { maxMatches: 3 });
234
254
  expect(results).toHaveLength(3);
235
255
  });
236
256
  });
237
257
  describe('Tie-Breaking by Date Proximity', () => {
238
- it('should use date proximity as tie-breaker when confidence scores equal', () => {
258
+ it('should use date proximity as tie-breaker when confidence scores equal', async () => {
239
259
  const sourceCharge = createTxCharge('tx-charge-1', [
240
260
  createMockTransaction({
241
261
  amount: "100",
@@ -263,12 +283,12 @@ describe('Single-Match Provider', () => {
263
283
  }),
264
284
  ]),
265
285
  ];
266
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
286
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
267
287
  expect(results[0].chargeId).toBe('doc-charge-close'); // Closest date wins
268
288
  expect(results[1].chargeId).toBe('doc-charge-medium');
269
289
  expect(results[2].chargeId).toBe('doc-charge-far');
270
290
  });
271
- it('should include dateProximity in results', () => {
291
+ it('should include dateProximity in results', async () => {
272
292
  const sourceCharge = createTxCharge('tx-charge-1', [
273
293
  createMockTransaction({ event_date: new Date('2024-01-15') }),
274
294
  ]);
@@ -277,12 +297,12 @@ describe('Single-Match Provider', () => {
277
297
  createMockDocument({ date: new Date('2024-01-14') }), // 1 day
278
298
  ]),
279
299
  ];
280
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
300
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
281
301
  expect(results[0].dateProximity).toBe(1);
282
302
  });
283
303
  });
284
304
  describe('Date Window Filtering', () => {
285
- it('should filter candidates outside 12-month window by default', () => {
305
+ it('should filter candidates outside 12-month window by default', async () => {
286
306
  const sourceCharge = createTxCharge('tx-charge-1', [
287
307
  createMockTransaction({ event_date: new Date('2024-01-15') }),
288
308
  ]);
@@ -294,11 +314,11 @@ describe('Single-Match Provider', () => {
294
314
  createMockDocument({ date: new Date('2025-02-15') }), // 13 months
295
315
  ]),
296
316
  ];
297
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
317
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
298
318
  expect(results).toHaveLength(1);
299
319
  expect(results[0].chargeId).toBe('doc-inside');
300
320
  });
301
- it('should respect custom dateWindowMonths option', () => {
321
+ it('should respect custom dateWindowMonths option', async () => {
302
322
  const sourceCharge = createTxCharge('tx-charge-1', [
303
323
  createMockTransaction({ event_date: new Date('2024-01-15') }),
304
324
  ]);
@@ -310,13 +330,13 @@ describe('Single-Match Provider', () => {
310
330
  createMockDocument({ date: new Date('2024-05-15') }), // 4 months
311
331
  ]),
312
332
  ];
313
- const results = findMatches(sourceCharge, candidateCharges, USER_ID, {
333
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector(), {
314
334
  dateWindowMonths: 3,
315
335
  });
316
336
  expect(results).toHaveLength(1);
317
337
  expect(results[0].chargeId).toBe('doc-inside');
318
338
  });
319
- it('should include candidates on exact window boundary', () => {
339
+ it('should include candidates on exact window boundary', async () => {
320
340
  const sourceCharge = createTxCharge('tx-charge-1', [
321
341
  createMockTransaction({ event_date: new Date('2024-01-15') }),
322
342
  ]);
@@ -325,12 +345,12 @@ describe('Single-Match Provider', () => {
325
345
  createMockDocument({ date: new Date('2025-01-15') }), // Exactly 12 months
326
346
  ]),
327
347
  ];
328
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
348
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
329
349
  expect(results).toHaveLength(1);
330
350
  });
331
351
  });
332
352
  describe('Fee Transactions Excluded', () => {
333
- it('should handle source with fee transactions via aggregator', () => {
353
+ it('should handle source with fee transactions via aggregator', async () => {
334
354
  const sourceCharge = createTxCharge('tx-charge-1', [
335
355
  createMockTransaction({ amount: "100", is_fee: false }),
336
356
  createMockTransaction({ amount: "5", is_fee: true }), // Should be excluded by aggregator
@@ -338,29 +358,29 @@ describe('Single-Match Provider', () => {
338
358
  const candidateCharges = [
339
359
  createDocCharge('doc-charge-1', [createMockDocument({ total_amount: 100 })]),
340
360
  ];
341
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
361
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
342
362
  expect(results).toHaveLength(1);
343
363
  expect(results[0].confidenceScore).toBeGreaterThan(0.95); // Matches 100, not 105
344
364
  });
345
- it('should throw error if all source transactions are fees', () => {
365
+ it('should throw error if all source transactions are fees', async () => {
346
366
  const allFeesCharge = createTxCharge('tx-charge-1', [
347
367
  createMockTransaction({ is_fee: true }),
348
368
  createMockTransaction({ is_fee: true }),
349
369
  ]);
350
- expect(() => findMatches(allFeesCharge, [], USER_ID)).toThrow(/all transactions are marked as fees/);
370
+ await expect(findMatches(allFeesCharge, [], USER_ID, createMockInjector())).rejects.toThrow(/all transactions are marked as fees/);
351
371
  });
352
372
  });
353
373
  describe('Same ChargeId → Throws Error', () => {
354
- it('should throw error when candidate has same chargeId as source', () => {
374
+ it('should throw error when candidate has same chargeId as source', async () => {
355
375
  const sourceCharge = createTxCharge('same-charge-id', [createMockTransaction()]);
356
376
  const candidateCharges = [
357
377
  createDocCharge('same-charge-id', [createMockDocument()]), // Same ID!
358
378
  ];
359
- expect(() => findMatches(sourceCharge, candidateCharges, USER_ID)).toThrow(/same ID as source charge/);
379
+ await expect(findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector())).rejects.toThrow(/same ID as source charge/);
360
380
  });
361
381
  });
362
382
  describe('Various Confidence Levels', () => {
363
- it('should rank matches by confidence level correctly', () => {
383
+ it('should rank matches by confidence level correctly', async () => {
364
384
  const sourceCharge = createTxCharge('tx-charge-1', [
365
385
  createMockTransaction({
366
386
  amount: "100",
@@ -411,7 +431,7 @@ describe('Single-Match Provider', () => {
411
431
  }),
412
432
  ]),
413
433
  ];
414
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
434
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
415
435
  expect(results).toHaveLength(4);
416
436
  expect(results[0].chargeId).toBe('perfect');
417
437
  expect(results[0].confidenceScore).toBeGreaterThan(0.95);
@@ -419,12 +439,12 @@ describe('Single-Match Provider', () => {
419
439
  expect(results[2].chargeId).toBe('medium');
420
440
  expect(results[3].chargeId).toBe('poor');
421
441
  });
422
- it('should include component scores in results', () => {
442
+ it('should include component scores in results', async () => {
423
443
  const sourceCharge = createTxCharge('tx-charge-1', [createMockTransaction()]);
424
444
  const candidateCharges = [
425
445
  createDocCharge('doc-charge-1', [createMockDocument()]),
426
446
  ];
427
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
447
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
428
448
  expect(results[0].components).toBeDefined();
429
449
  expect(results[0].components.amount).toBeGreaterThanOrEqual(0);
430
450
  expect(results[0].components.currency).toBeGreaterThanOrEqual(0);
@@ -433,7 +453,7 @@ describe('Single-Match Provider', () => {
433
453
  });
434
454
  });
435
455
  describe('Edge Cases', () => {
436
- it('should handle multiple transactions in source charge', () => {
456
+ it('should handle multiple transactions in source charge', async () => {
437
457
  const sourceCharge = createTxCharge('tx-charge-1', [
438
458
  createMockTransaction({ amount: "50" }),
439
459
  createMockTransaction({ amount: "50" }),
@@ -441,11 +461,11 @@ describe('Single-Match Provider', () => {
441
461
  const candidateCharges = [
442
462
  createDocCharge('doc-charge-1', [createMockDocument({ total_amount: 100 })]),
443
463
  ];
444
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
464
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
445
465
  expect(results).toHaveLength(1);
446
466
  expect(results[0].confidenceScore).toBeGreaterThan(0.95); // 50+50 = 100
447
467
  });
448
- it('should handle multiple documents in candidate charge', () => {
468
+ it('should handle multiple documents in candidate charge', async () => {
449
469
  const sourceCharge = createTxCharge('tx-charge-1', [
450
470
  createMockTransaction({ amount: "100" }),
451
471
  ]);
@@ -455,11 +475,11 @@ describe('Single-Match Provider', () => {
455
475
  createMockDocument({ total_amount: 40 }),
456
476
  ]),
457
477
  ];
458
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
478
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
459
479
  expect(results).toHaveLength(1);
460
480
  expect(results[0].confidenceScore).toBeGreaterThan(0.95); // 60+40 = 100
461
481
  });
462
- it('should handle negative amounts (credit transactions)', () => {
482
+ it('should handle negative amounts (credit transactions)', async () => {
463
483
  const sourceCharge = createTxCharge('tx-charge-1', [
464
484
  createMockTransaction({ amount: "-100" }),
465
485
  ]);
@@ -473,7 +493,7 @@ describe('Single-Match Provider', () => {
473
493
  }),
474
494
  ]),
475
495
  ];
476
- const results = findMatches(sourceCharge, candidateCharges, USER_ID);
496
+ const results = await findMatches(sourceCharge, candidateCharges, USER_ID, createMockInjector());
477
497
  expect(results).toHaveLength(1);
478
498
  expect(results[0].confidenceScore).toBeGreaterThan(0.9);
479
499
  });
@@ -1 +1 @@
1
- {"version":3,"file":"single-match.test.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__tests__/single-match.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single-match.test.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__tests__/single-match.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
+ import { DocumentType } from '../../../shared/enums.js';
1
2
  /**
2
3
  * Accounting document types that count toward matched/unmatched status
3
4
  */
4
5
  const ACCOUNTING_DOC_TYPES = [
5
- 'INVOICE',
6
- 'CREDIT_INVOICE',
7
- 'RECEIPT',
8
- 'INVOICE_RECEIPT',
6
+ DocumentType.Invoice,
7
+ DocumentType.CreditInvoice,
8
+ DocumentType.Receipt,
9
+ DocumentType.InvoiceReceipt,
10
+ DocumentType.Proforma,
9
11
  ];
10
12
  /**
11
13
  * Validate a charge is properly formed for matching
@@ -1 +1 @@
1
- {"version":3,"file":"charge-validator.helper.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/helpers/charge-validator.helper.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,oBAAoB,GAAmB;IAC3C,SAAS;IACT,gBAAgB;IAChB,SAAS;IACT,iBAAiB;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC/D,CAAC;IAED,2BAA2B;IAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAErE,IAAI,CAAC,eAAe,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,uDAAuD,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CACrD,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAoB,CAAC,CACxD,CAAC;IAEF,OAAO,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,iBAAiB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CACrD,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAoB,CAAC,CACxD,CAAC;IAEF,OAAO,CAAC,CAAC,eAAe,IAAI,CAAC,iBAAiB,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CACrD,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAoB,CAAC,CACxD,CAAC;IAEF,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,iBAAiB,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,EAAE,sEAAsE,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"charge-validator.helper.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/helpers/charge-validator.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAaxD;;GAEG;AACH,MAAM,oBAAoB,GAAmB;IAC3C,YAAY,CAAC,OAAO;IACpB,YAAY,CAAC,aAAa;IAC1B,YAAY,CAAC,OAAO;IACpB,YAAY,CAAC,cAAc;IAC3B,YAAY,CAAC,QAAQ;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC/D,CAAC;IAED,2BAA2B;IAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAErE,IAAI,CAAC,eAAe,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,uDAAuD,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CACrD,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAoB,CAAC,CACxD,CAAC;IAEF,OAAO,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,iBAAiB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CACrD,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAoB,CAAC,CACxD,CAAC;IAEF,OAAO,CAAC,CAAC,eAAe,IAAI,CAAC,iBAAiB,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CACrD,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAoB,CAAC,CACxD,CAAC;IAEF,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,iBAAiB,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,EAAE,sEAAsE,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,7 +1,14 @@
1
1
  /**
2
2
  * Calculate confidence score based on date proximity
3
+ *
4
+ * Client-Aware Logic:
5
+ * - Client same-business matches: Always return 1.0
6
+ * This allows amount/currency matching to be primary ranking factors for recurring charges from clients
7
+ * - Non-client or cross-business matches: Apply linear degradation (1.0 same-day to 0.0 at 30+ days)
8
+ *
3
9
  * @param date1 - First date
4
10
  * @param date2 - Second date
5
- * @returns Confidence score from 0.0 (30+ days) to 1.0 (same day)
11
+ * @param isClientMatch - Whether transaction business matches document business AND is a registered CLIENT (default: false)
12
+ * @returns Confidence score from 0.0 (30+ days) to 1.0 (same day for non-client, always for client)
6
13
  */
7
- export declare function calculateDateConfidence(date1: Date, date2: Date): number;
14
+ export declare function calculateDateConfidence(date1: Date, date2: Date, isGentleEligible?: boolean): number;
@@ -17,11 +17,33 @@ function calculateDaysDifference(date1, date2) {
17
17
  }
18
18
  /**
19
19
  * Calculate confidence score based on date proximity
20
+ *
21
+ * Client-Aware Logic:
22
+ * - Client same-business matches: Always return 1.0
23
+ * This allows amount/currency matching to be primary ranking factors for recurring charges from clients
24
+ * - Non-client or cross-business matches: Apply linear degradation (1.0 same-day to 0.0 at 30+ days)
25
+ *
20
26
  * @param date1 - First date
21
27
  * @param date2 - Second date
22
- * @returns Confidence score from 0.0 (30+ days) to 1.0 (same day)
28
+ * @param isClientMatch - Whether transaction business matches document business AND is a registered CLIENT (default: false)
29
+ * @returns Confidence score from 0.0 (30+ days) to 1.0 (same day for non-client, always for client)
23
30
  */
24
- export function calculateDateConfidence(date1, date2) {
31
+ export function calculateDateConfidence(date1, date2, isGentleEligible = false) {
32
+ // Gentle client-eligible scoring: slight preference for earlier within 365 days
33
+ // f(d) = a + k*d with f(365)=1.0 and f(60)=0.997
34
+ if (isGentleEligible) {
35
+ const daysDiff = calculateDaysDifference(date1, date2);
36
+ // Ineligible beyond 365 days
37
+ if (daysDiff > 365) {
38
+ return 0.0;
39
+ }
40
+ // Compute linear function parameters
41
+ const k = (1.0 - 0.997) / (365 - 60); // ~9.836e-6
42
+ const a = 0.997 - k * 60; // ~0.99640984
43
+ const confidence = a + k * daysDiff;
44
+ // Round to 2 decimal places (will be 1.0 for most practical diffs)
45
+ return Math.round(confidence * 100) / 100;
46
+ }
25
47
  const daysDiff = calculateDaysDifference(date1, date2);
26
48
  // 30 or more days: return 0.0
27
49
  if (daysDiff >= 30) {
@@ -1 +1 @@
1
- {"version":3,"file":"date-confidence.helper.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/helpers/date-confidence.helper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,KAAW,EAAE,KAAW;IACvD,uEAAuE;IACvE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAE5E,uCAAuC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD,kBAAkB;IAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAW,EAAE,KAAW;IAC9D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvD,8BAA8B;IAC9B,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6CAA6C;IAC7C,MAAM,UAAU,GAAG,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;IAEvC,4BAA4B;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"date-confidence.helper.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/helpers/date-confidence.helper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,KAAW,EAAE,KAAW;IACvD,uEAAuE;IACvE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAE5E,uCAAuC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD,kBAAkB;IAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAW,EACX,KAAW,EACX,mBAA4B,KAAK;IAEjC,gFAAgF;IAChF,iDAAiD;IACjD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEvD,6BAA6B;QAC7B,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;YACnB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,qCAAqC;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;QAClD,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc;QACxC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAEpC,mEAAmE;QACnE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvD,8BAA8B;IAC9B,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6CAA6C;IAC7C,MAAM,UAAU,GAAG,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;IAEvC,4BAA4B;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5C,CAAC"}
@@ -7,10 +7,7 @@
7
7
  * 2. If business is creditor: negate
8
8
  * 3. If document type is CREDIT_INVOICE: negate
9
9
  */
10
- /**
11
- * Document types from database schema
12
- */
13
- export type DocumentType = 'CREDIT_INVOICE' | 'INVOICE' | 'INVOICE_RECEIPT' | 'OTHER' | 'PROFORMA' | 'RECEIPT' | 'UNPROCESSED';
10
+ import { DocumentType } from '../../../shared/enums.js';
14
11
  /**
15
12
  * Normalize document amount for comparison with transaction amount
16
13
  *