@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.
- package/CHANGELOG.md +16 -8
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js +45 -122
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js +45 -29
- package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js +2 -11
- package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js +25 -0
- package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js +65 -64
- package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js +494 -60
- package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js +34 -98
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js +79 -59
- package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js +6 -4
- package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.d.ts +9 -2
- package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js +24 -2
- package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.d.ts +1 -4
- package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js +2 -1
- package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/index.d.ts +0 -1
- package/dist/server/src/modules/charges-matcher/index.js +0 -1
- package/dist/server/src/modules/charges-matcher/index.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.d.ts +2 -1
- package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js +2 -2
- package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js +2 -2
- package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/providers/document-aggregator.d.ts +4 -5
- package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js +5 -4
- package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.d.ts +5 -3
- package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js +70 -13
- package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/providers/single-match.provider.d.ts +4 -2
- package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js +15 -7
- package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js.map +1 -1
- package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.d.ts +1 -1
- package/dist/server/src/modules/charges-matcher/types.d.ts +2 -4
- package/dist/server/src/modules/charges-matcher/types.js.map +1 -1
- package/package.json +2 -2
- package/src/modules/charges-matcher/README.md +14 -3
- package/src/modules/charges-matcher/__tests__/auto-match-integration.test.ts +52 -100
- package/src/modules/charges-matcher/__tests__/auto-match.test.ts +51 -29
- package/src/modules/charges-matcher/__tests__/charge-validator.test.ts +2 -13
- package/src/modules/charges-matcher/__tests__/date-confidence.test.ts +29 -0
- package/src/modules/charges-matcher/__tests__/document-aggregator.test.ts +0 -1
- package/src/modules/charges-matcher/__tests__/document-amount.test.ts +66 -65
- package/src/modules/charges-matcher/__tests__/match-scorer.test.ts +552 -60
- package/src/modules/charges-matcher/__tests__/single-match-integration.test.ts +43 -73
- package/src/modules/charges-matcher/__tests__/single-match.test.ts +81 -59
- package/src/modules/charges-matcher/documentation/SPEC.md +276 -4
- package/src/modules/charges-matcher/helpers/charge-validator.helper.ts +7 -5
- package/src/modules/charges-matcher/helpers/date-confidence.helper.ts +32 -2
- package/src/modules/charges-matcher/helpers/document-amount.helper.ts +2 -12
- package/src/modules/charges-matcher/index.ts +0 -1
- package/src/modules/charges-matcher/providers/auto-match.provider.ts +5 -3
- package/src/modules/charges-matcher/providers/charges-matcher.provider.ts +8 -2
- package/src/modules/charges-matcher/providers/document-aggregator.ts +12 -11
- package/src/modules/charges-matcher/providers/match-scorer.provider.ts +97 -17
- package/src/modules/charges-matcher/providers/single-match.provider.ts +21 -8
- package/src/modules/charges-matcher/providers/transaction-aggregator.ts +1 -1
- 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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":"
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
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
|
|
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
|
*
|