@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
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { normalizeDocumentAmount, } from '../helpers/document-amount.helper.js';
|
|
3
|
+
describe('Document Amount Normalization', () => {
|
|
4
|
+
describe('INVOICE - Business is Debtor (User is Creditor)', () => {
|
|
5
|
+
it('should return positive amount when business is debtor', () => {
|
|
6
|
+
// Business owes user (user is creditor, business is debtor)
|
|
7
|
+
const result = normalizeDocumentAmount(100, false, 'INVOICE');
|
|
8
|
+
expect(result).toBe(100);
|
|
9
|
+
});
|
|
10
|
+
it('should handle decimal amounts', () => {
|
|
11
|
+
const result = normalizeDocumentAmount(150.75, false, 'INVOICE');
|
|
12
|
+
expect(result).toBe(150.75);
|
|
13
|
+
});
|
|
14
|
+
it('should handle large amounts', () => {
|
|
15
|
+
const result = normalizeDocumentAmount(1000000, false, 'INVOICE');
|
|
16
|
+
expect(result).toBe(1000000);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('INVOICE - Business is Creditor (User is Debtor)', () => {
|
|
20
|
+
it('should return negative amount when business is creditor', () => {
|
|
21
|
+
// User owes business (user is debtor, business is creditor)
|
|
22
|
+
const result = normalizeDocumentAmount(100, true, 'INVOICE');
|
|
23
|
+
expect(result).toBe(-100);
|
|
24
|
+
});
|
|
25
|
+
it('should handle decimal amounts', () => {
|
|
26
|
+
const result = normalizeDocumentAmount(250.50, true, 'INVOICE');
|
|
27
|
+
expect(result).toBe(-250.50);
|
|
28
|
+
});
|
|
29
|
+
it('should handle large amounts', () => {
|
|
30
|
+
const result = normalizeDocumentAmount(5000000, true, 'INVOICE');
|
|
31
|
+
expect(result).toBe(-5000000);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('CREDIT_INVOICE - Business is Debtor (User is Creditor)', () => {
|
|
35
|
+
it('should return negative amount for credit invoice with business debtor', () => {
|
|
36
|
+
// Credit invoice: user owes refund to business (opposite of regular invoice)
|
|
37
|
+
const result = normalizeDocumentAmount(100, false, 'CREDIT_INVOICE');
|
|
38
|
+
expect(result).toBe(-100);
|
|
39
|
+
});
|
|
40
|
+
it('should handle decimal amounts', () => {
|
|
41
|
+
const result = normalizeDocumentAmount(75.25, false, 'CREDIT_INVOICE');
|
|
42
|
+
expect(result).toBe(-75.25);
|
|
43
|
+
});
|
|
44
|
+
it('should handle large amounts', () => {
|
|
45
|
+
const result = normalizeDocumentAmount(2000000, false, 'CREDIT_INVOICE');
|
|
46
|
+
expect(result).toBe(-2000000);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('CREDIT_INVOICE - Business is Creditor (User is Debtor)', () => {
|
|
50
|
+
it('should return positive amount for credit invoice with business creditor (double negation)', () => {
|
|
51
|
+
// Credit invoice: business owes refund to user (double negation: -1 * -1 = 1)
|
|
52
|
+
const result = normalizeDocumentAmount(100, true, 'CREDIT_INVOICE');
|
|
53
|
+
expect(result).toBe(100);
|
|
54
|
+
});
|
|
55
|
+
it('should handle decimal amounts', () => {
|
|
56
|
+
const result = normalizeDocumentAmount(125.99, true, 'CREDIT_INVOICE');
|
|
57
|
+
expect(result).toBe(125.99);
|
|
58
|
+
});
|
|
59
|
+
it('should handle large amounts', () => {
|
|
60
|
+
const result = normalizeDocumentAmount(3000000, true, 'CREDIT_INVOICE');
|
|
61
|
+
expect(result).toBe(3000000);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('RECEIPT - Business is Debtor (User is Creditor)', () => {
|
|
65
|
+
it('should return positive amount when business is debtor', () => {
|
|
66
|
+
const result = normalizeDocumentAmount(100, false, 'RECEIPT');
|
|
67
|
+
expect(result).toBe(100);
|
|
68
|
+
});
|
|
69
|
+
it('should handle typical receipt amounts', () => {
|
|
70
|
+
const result = normalizeDocumentAmount(49.99, false, 'RECEIPT');
|
|
71
|
+
expect(result).toBe(49.99);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('RECEIPT - Business is Creditor (User is Debtor)', () => {
|
|
75
|
+
it('should return negative amount when business is creditor', () => {
|
|
76
|
+
const result = normalizeDocumentAmount(100, true, 'RECEIPT');
|
|
77
|
+
expect(result).toBe(-100);
|
|
78
|
+
});
|
|
79
|
+
it('should handle typical receipt amounts', () => {
|
|
80
|
+
const result = normalizeDocumentAmount(89.50, true, 'RECEIPT');
|
|
81
|
+
expect(result).toBe(-89.50);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('INVOICE_RECEIPT - Business is Debtor (User is Creditor)', () => {
|
|
85
|
+
it('should return positive amount when business is debtor', () => {
|
|
86
|
+
const result = normalizeDocumentAmount(100, false, 'INVOICE_RECEIPT');
|
|
87
|
+
expect(result).toBe(100);
|
|
88
|
+
});
|
|
89
|
+
it('should handle combined invoice-receipt amounts', () => {
|
|
90
|
+
const result = normalizeDocumentAmount(350.00, false, 'INVOICE_RECEIPT');
|
|
91
|
+
expect(result).toBe(350.00);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('INVOICE_RECEIPT - Business is Creditor (User is Debtor)', () => {
|
|
95
|
+
it('should return negative amount when business is creditor', () => {
|
|
96
|
+
const result = normalizeDocumentAmount(100, true, 'INVOICE_RECEIPT');
|
|
97
|
+
expect(result).toBe(-100);
|
|
98
|
+
});
|
|
99
|
+
it('should handle combined invoice-receipt amounts', () => {
|
|
100
|
+
const result = normalizeDocumentAmount(425.75, true, 'INVOICE_RECEIPT');
|
|
101
|
+
expect(result).toBe(-425.75);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('OTHER Document Type', () => {
|
|
105
|
+
it('should handle OTHER type with business debtor', () => {
|
|
106
|
+
const result = normalizeDocumentAmount(100, false, 'OTHER');
|
|
107
|
+
expect(result).toBe(100);
|
|
108
|
+
});
|
|
109
|
+
it('should handle OTHER type with business creditor', () => {
|
|
110
|
+
const result = normalizeDocumentAmount(100, true, 'OTHER');
|
|
111
|
+
expect(result).toBe(-100);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe('PROFORMA Document Type', () => {
|
|
115
|
+
it('should handle PROFORMA type with business debtor', () => {
|
|
116
|
+
const result = normalizeDocumentAmount(100, false, 'PROFORMA');
|
|
117
|
+
expect(result).toBe(100);
|
|
118
|
+
});
|
|
119
|
+
it('should handle PROFORMA type with business creditor', () => {
|
|
120
|
+
const result = normalizeDocumentAmount(100, true, 'PROFORMA');
|
|
121
|
+
expect(result).toBe(-100);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe('UNPROCESSED Document Type', () => {
|
|
125
|
+
it('should handle UNPROCESSED type with business debtor', () => {
|
|
126
|
+
const result = normalizeDocumentAmount(100, false, 'UNPROCESSED');
|
|
127
|
+
expect(result).toBe(100);
|
|
128
|
+
});
|
|
129
|
+
it('should handle UNPROCESSED type with business creditor', () => {
|
|
130
|
+
const result = normalizeDocumentAmount(100, true, 'UNPROCESSED');
|
|
131
|
+
expect(result).toBe(-100);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('Negative Input Amounts (Absolute Value First)', () => {
|
|
135
|
+
it('should convert negative input to positive for INVOICE with business debtor', () => {
|
|
136
|
+
// Input is -100, should become |−100| = 100
|
|
137
|
+
const result = normalizeDocumentAmount(-100, false, 'INVOICE');
|
|
138
|
+
expect(result).toBe(100);
|
|
139
|
+
});
|
|
140
|
+
it('should convert negative input to negative for INVOICE with business creditor', () => {
|
|
141
|
+
// Input is -100, should become |−100| * -1 = -100
|
|
142
|
+
const result = normalizeDocumentAmount(-100, true, 'INVOICE');
|
|
143
|
+
expect(result).toBe(-100);
|
|
144
|
+
});
|
|
145
|
+
it('should convert negative input for CREDIT_INVOICE with business debtor', () => {
|
|
146
|
+
// Input is -100, should become |−100| * -1 = -100
|
|
147
|
+
const result = normalizeDocumentAmount(-100, false, 'CREDIT_INVOICE');
|
|
148
|
+
expect(result).toBe(-100);
|
|
149
|
+
});
|
|
150
|
+
it('should convert negative input for CREDIT_INVOICE with business creditor', () => {
|
|
151
|
+
// Input is -100, should become |−100| * -1 * -1 = 100
|
|
152
|
+
const result = normalizeDocumentAmount(-100, true, 'CREDIT_INVOICE');
|
|
153
|
+
expect(result).toBe(100);
|
|
154
|
+
});
|
|
155
|
+
it('should handle negative decimal amounts', () => {
|
|
156
|
+
const result = normalizeDocumentAmount(-250.50, false, 'INVOICE');
|
|
157
|
+
expect(result).toBe(250.50);
|
|
158
|
+
});
|
|
159
|
+
it('should handle large negative amounts', () => {
|
|
160
|
+
const result = normalizeDocumentAmount(-1000000, true, 'RECEIPT');
|
|
161
|
+
expect(result).toBe(-1000000);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('Zero Amounts', () => {
|
|
165
|
+
it('should handle zero amount with business debtor', () => {
|
|
166
|
+
const result = normalizeDocumentAmount(0, false, 'INVOICE');
|
|
167
|
+
expect(result).toBe(0);
|
|
168
|
+
});
|
|
169
|
+
it('should handle zero amount with business creditor', () => {
|
|
170
|
+
const result = normalizeDocumentAmount(0, true, 'INVOICE');
|
|
171
|
+
expect(result).toBe(-0); // JavaScript has -0, but 0 === -0 is true
|
|
172
|
+
});
|
|
173
|
+
it('should handle zero for CREDIT_INVOICE', () => {
|
|
174
|
+
const result = normalizeDocumentAmount(0, false, 'CREDIT_INVOICE');
|
|
175
|
+
expect(result).toBe(-0);
|
|
176
|
+
});
|
|
177
|
+
it('should verify zero equality regardless of sign', () => {
|
|
178
|
+
const result1 = normalizeDocumentAmount(0, false, 'INVOICE');
|
|
179
|
+
const result2 = normalizeDocumentAmount(0, true, 'INVOICE');
|
|
180
|
+
expect(result1).toBe(0);
|
|
181
|
+
// In JavaScript, -0 and 0 are loosely equal but Object.is distinguishes them
|
|
182
|
+
// For our purposes, they are functionally equivalent
|
|
183
|
+
expect(result2 == 0).toBe(true); // Using == instead of === for -0 case
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
describe('Very Large Amounts', () => {
|
|
187
|
+
it('should handle very large positive amounts', () => {
|
|
188
|
+
const largeAmount = 999999999.99;
|
|
189
|
+
const result = normalizeDocumentAmount(largeAmount, false, 'INVOICE');
|
|
190
|
+
expect(result).toBe(largeAmount);
|
|
191
|
+
});
|
|
192
|
+
it('should handle very large amounts with creditor negation', () => {
|
|
193
|
+
const largeAmount = 999999999.99;
|
|
194
|
+
const result = normalizeDocumentAmount(largeAmount, true, 'INVOICE');
|
|
195
|
+
expect(result).toBe(-largeAmount);
|
|
196
|
+
});
|
|
197
|
+
it('should handle very large amounts with CREDIT_INVOICE', () => {
|
|
198
|
+
const largeAmount = 888888888.88;
|
|
199
|
+
const result = normalizeDocumentAmount(largeAmount, true, 'CREDIT_INVOICE');
|
|
200
|
+
expect(result).toBe(largeAmount);
|
|
201
|
+
});
|
|
202
|
+
it('should handle maximum safe integer', () => {
|
|
203
|
+
const maxSafe = Number.MAX_SAFE_INTEGER;
|
|
204
|
+
const result = normalizeDocumentAmount(maxSafe, false, 'INVOICE');
|
|
205
|
+
expect(result).toBe(maxSafe);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
describe('Small Decimal Amounts', () => {
|
|
209
|
+
it('should handle very small decimal amounts', () => {
|
|
210
|
+
const result = normalizeDocumentAmount(0.01, false, 'INVOICE');
|
|
211
|
+
expect(result).toBe(0.01);
|
|
212
|
+
});
|
|
213
|
+
it('should handle fractional cents', () => {
|
|
214
|
+
const result = normalizeDocumentAmount(0.001, true, 'RECEIPT');
|
|
215
|
+
expect(result).toBe(-0.001);
|
|
216
|
+
});
|
|
217
|
+
it('should preserve precision for small decimals', () => {
|
|
218
|
+
const result = normalizeDocumentAmount(1.23456789, false, 'INVOICE');
|
|
219
|
+
expect(result).toBe(1.23456789);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
describe('All Document Types Summary Table', () => {
|
|
223
|
+
// This test documents the expected behavior for all combinations
|
|
224
|
+
it('should correctly normalize all document type and business role combinations', () => {
|
|
225
|
+
const testCases = [
|
|
226
|
+
// INVOICE
|
|
227
|
+
{ type: 'INVOICE', isCreditor: false, input: 100, expected: 100, description: 'INVOICE, business debtor' },
|
|
228
|
+
{ type: 'INVOICE', isCreditor: true, input: 100, expected: -100, description: 'INVOICE, business creditor' },
|
|
229
|
+
// CREDIT_INVOICE
|
|
230
|
+
{ type: 'CREDIT_INVOICE', isCreditor: false, input: 100, expected: -100, description: 'CREDIT_INVOICE, business debtor' },
|
|
231
|
+
{ type: 'CREDIT_INVOICE', isCreditor: true, input: 100, expected: 100, description: 'CREDIT_INVOICE, business creditor (double neg)' },
|
|
232
|
+
// RECEIPT
|
|
233
|
+
{ type: 'RECEIPT', isCreditor: false, input: 100, expected: 100, description: 'RECEIPT, business debtor' },
|
|
234
|
+
{ type: 'RECEIPT', isCreditor: true, input: 100, expected: -100, description: 'RECEIPT, business creditor' },
|
|
235
|
+
// INVOICE_RECEIPT
|
|
236
|
+
{ type: 'INVOICE_RECEIPT', isCreditor: false, input: 100, expected: 100, description: 'INVOICE_RECEIPT, business debtor' },
|
|
237
|
+
{ type: 'INVOICE_RECEIPT', isCreditor: true, input: 100, expected: -100, description: 'INVOICE_RECEIPT, business creditor' },
|
|
238
|
+
// OTHER
|
|
239
|
+
{ type: 'OTHER', isCreditor: false, input: 100, expected: 100, description: 'OTHER, business debtor' },
|
|
240
|
+
{ type: 'OTHER', isCreditor: true, input: 100, expected: -100, description: 'OTHER, business creditor' },
|
|
241
|
+
// PROFORMA
|
|
242
|
+
{ type: 'PROFORMA', isCreditor: false, input: 100, expected: 100, description: 'PROFORMA, business debtor' },
|
|
243
|
+
{ type: 'PROFORMA', isCreditor: true, input: 100, expected: -100, description: 'PROFORMA, business creditor' },
|
|
244
|
+
// UNPROCESSED
|
|
245
|
+
{ type: 'UNPROCESSED', isCreditor: false, input: 100, expected: 100, description: 'UNPROCESSED, business debtor' },
|
|
246
|
+
{ type: 'UNPROCESSED', isCreditor: true, input: 100, expected: -100, description: 'UNPROCESSED, business creditor' },
|
|
247
|
+
];
|
|
248
|
+
testCases.forEach(({ type, isCreditor, input, expected, description }) => {
|
|
249
|
+
const result = normalizeDocumentAmount(input, isCreditor, type);
|
|
250
|
+
expect(result).toBe(expected);
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
describe('Real-World Scenarios', () => {
|
|
255
|
+
it('should normalize customer invoice (business sends invoice to customer)', () => {
|
|
256
|
+
// Business is creditor (customer owes business)
|
|
257
|
+
const result = normalizeDocumentAmount(1500, true, 'INVOICE');
|
|
258
|
+
expect(result).toBe(-1500); // Negative because user owes
|
|
259
|
+
});
|
|
260
|
+
it('should normalize vendor invoice (vendor sends invoice to business)', () => {
|
|
261
|
+
// Business is debtor (business owes vendor)
|
|
262
|
+
const result = normalizeDocumentAmount(750, false, 'INVOICE');
|
|
263
|
+
expect(result).toBe(750); // Positive because vendor owes user
|
|
264
|
+
});
|
|
265
|
+
it('should normalize customer refund (credit invoice to customer)', () => {
|
|
266
|
+
// Business owes customer a refund
|
|
267
|
+
const result = normalizeDocumentAmount(200, true, 'CREDIT_INVOICE');
|
|
268
|
+
expect(result).toBe(200); // Positive because business owes refund
|
|
269
|
+
});
|
|
270
|
+
it('should normalize vendor credit note (credit invoice from vendor)', () => {
|
|
271
|
+
// Vendor gives credit note to business
|
|
272
|
+
const result = normalizeDocumentAmount(150, false, 'CREDIT_INVOICE');
|
|
273
|
+
expect(result).toBe(-150); // Negative because business owes vendor less now
|
|
274
|
+
});
|
|
275
|
+
it('should normalize payment receipt from customer', () => {
|
|
276
|
+
// Customer pays business
|
|
277
|
+
const result = normalizeDocumentAmount(500, true, 'RECEIPT');
|
|
278
|
+
expect(result).toBe(-500); // Negative because customer paid
|
|
279
|
+
});
|
|
280
|
+
it('should normalize payment receipt to vendor', () => {
|
|
281
|
+
// Business pays vendor
|
|
282
|
+
const result = normalizeDocumentAmount(300, false, 'RECEIPT');
|
|
283
|
+
expect(result).toBe(300); // Positive because business paid
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
//# sourceMappingURL=document-amount.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-amount.test.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__tests__/document-amount.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { extractDocumentBusiness, } from '../helpers/document-business.helper.js';
|
|
3
|
+
describe('extractDocumentBusiness', () => {
|
|
4
|
+
const adminBusinessId = 'user-123';
|
|
5
|
+
const businessId1 = 'business-456';
|
|
6
|
+
const businessId2 = 'business-789';
|
|
7
|
+
describe('valid scenarios - user is debtor', () => {
|
|
8
|
+
it('should return creditor as business when user is debtor', () => {
|
|
9
|
+
const result = extractDocumentBusiness(businessId1, adminBusinessId, adminBusinessId);
|
|
10
|
+
expect(result).toEqual({
|
|
11
|
+
businessId: businessId1,
|
|
12
|
+
isBusinessCreditor: true,
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
it('should handle null creditor when user is debtor', () => {
|
|
16
|
+
const result = extractDocumentBusiness(null, adminBusinessId, adminBusinessId);
|
|
17
|
+
expect(result).toEqual({
|
|
18
|
+
businessId: null,
|
|
19
|
+
isBusinessCreditor: true,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
it('should work with different business IDs when user is debtor', () => {
|
|
23
|
+
const result = extractDocumentBusiness(businessId2, adminBusinessId, adminBusinessId);
|
|
24
|
+
expect(result).toEqual({
|
|
25
|
+
businessId: businessId2,
|
|
26
|
+
isBusinessCreditor: true,
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('valid scenarios - user is creditor', () => {
|
|
31
|
+
it('should return debtor as business when user is creditor', () => {
|
|
32
|
+
const result = extractDocumentBusiness(adminBusinessId, businessId1, adminBusinessId);
|
|
33
|
+
expect(result).toEqual({
|
|
34
|
+
businessId: businessId1,
|
|
35
|
+
isBusinessCreditor: false,
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it('should handle null debtor when user is creditor', () => {
|
|
39
|
+
const result = extractDocumentBusiness(adminBusinessId, null, adminBusinessId);
|
|
40
|
+
expect(result).toEqual({
|
|
41
|
+
businessId: null,
|
|
42
|
+
isBusinessCreditor: false,
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
it('should work with different business IDs when user is creditor', () => {
|
|
46
|
+
const result = extractDocumentBusiness(adminBusinessId, businessId2, adminBusinessId);
|
|
47
|
+
expect(result).toEqual({
|
|
48
|
+
businessId: businessId2,
|
|
49
|
+
isBusinessCreditor: false,
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('error scenarios - both are user', () => {
|
|
54
|
+
it('should throw error when both creditor and debtor are user', () => {
|
|
55
|
+
expect(() => extractDocumentBusiness(adminBusinessId, adminBusinessId, adminBusinessId)).toThrow('Document has both creditor_id and debtor_id equal to user ID - invalid document state');
|
|
56
|
+
});
|
|
57
|
+
it('should include clear error message for both-user scenario', () => {
|
|
58
|
+
try {
|
|
59
|
+
extractDocumentBusiness(adminBusinessId, adminBusinessId, adminBusinessId);
|
|
60
|
+
expect.fail('Should have thrown an error');
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
expect(error).toBeInstanceOf(Error);
|
|
64
|
+
expect(error.message).toContain('both creditor_id and debtor_id equal to user');
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('error scenarios - neither are user', () => {
|
|
69
|
+
it('should throw error when neither creditor nor debtor are user', () => {
|
|
70
|
+
expect(() => extractDocumentBusiness(businessId1, businessId2, adminBusinessId)).toThrow('Document has neither creditor_id nor debtor_id equal to user ID - document does not belong to user');
|
|
71
|
+
});
|
|
72
|
+
it('should throw error when creditor is business and debtor is null (neither is user)', () => {
|
|
73
|
+
expect(() => extractDocumentBusiness(businessId1, null, adminBusinessId)).toThrow('Document has neither creditor_id nor debtor_id equal to user ID - document does not belong to user');
|
|
74
|
+
});
|
|
75
|
+
it('should throw error when debtor is business and creditor is null (neither is user)', () => {
|
|
76
|
+
expect(() => extractDocumentBusiness(null, businessId1, adminBusinessId)).toThrow('Document has neither creditor_id nor debtor_id equal to user ID - document does not belong to user');
|
|
77
|
+
});
|
|
78
|
+
it('should include clear error message for neither-user scenario', () => {
|
|
79
|
+
try {
|
|
80
|
+
extractDocumentBusiness(businessId1, businessId2, adminBusinessId);
|
|
81
|
+
expect.fail('Should have thrown an error');
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
expect(error).toBeInstanceOf(Error);
|
|
85
|
+
expect(error.message).toContain('neither creditor_id nor debtor_id equal to user');
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('error scenarios - both are null', () => {
|
|
90
|
+
it('should throw error when both creditor and debtor are null', () => {
|
|
91
|
+
expect(() => extractDocumentBusiness(null, null, adminBusinessId)).toThrow('Document has both creditor_id and debtor_id as null - invalid document state');
|
|
92
|
+
});
|
|
93
|
+
it('should include clear error message for both-null scenario', () => {
|
|
94
|
+
try {
|
|
95
|
+
extractDocumentBusiness(null, null, adminBusinessId);
|
|
96
|
+
expect.fail('Should have thrown an error');
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
expect(error).toBeInstanceOf(Error);
|
|
100
|
+
expect(error.message).toContain('both creditor_id and debtor_id as null');
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('return value structure', () => {
|
|
105
|
+
it('should return object with correct properties', () => {
|
|
106
|
+
const result = extractDocumentBusiness(businessId1, adminBusinessId, adminBusinessId);
|
|
107
|
+
expect(result).toHaveProperty('businessId');
|
|
108
|
+
expect(result).toHaveProperty('isBusinessCreditor');
|
|
109
|
+
expect(typeof result.isBusinessCreditor).toBe('boolean');
|
|
110
|
+
});
|
|
111
|
+
it('should return consistent structure for null business', () => {
|
|
112
|
+
const result = extractDocumentBusiness(null, adminBusinessId, adminBusinessId);
|
|
113
|
+
expect(result).toHaveProperty('businessId');
|
|
114
|
+
expect(result).toHaveProperty('isBusinessCreditor');
|
|
115
|
+
expect(result.businessId).toBe(null);
|
|
116
|
+
expect(typeof result.isBusinessCreditor).toBe('boolean');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('business creditor flag correctness', () => {
|
|
120
|
+
it('should set isBusinessCreditor to true when user is debtor (business is creditor)', () => {
|
|
121
|
+
const result = extractDocumentBusiness(businessId1, adminBusinessId, adminBusinessId);
|
|
122
|
+
expect(result.isBusinessCreditor).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
it('should set isBusinessCreditor to false when user is creditor (business is debtor)', () => {
|
|
125
|
+
const result = extractDocumentBusiness(adminBusinessId, businessId1, adminBusinessId);
|
|
126
|
+
expect(result.isBusinessCreditor).toBe(false);
|
|
127
|
+
});
|
|
128
|
+
it('should set isBusinessCreditor correctly even when business is null', () => {
|
|
129
|
+
const resultDebtorUser = extractDocumentBusiness(null, adminBusinessId, adminBusinessId);
|
|
130
|
+
expect(resultDebtorUser.isBusinessCreditor).toBe(true);
|
|
131
|
+
const resultCreditorUser = extractDocumentBusiness(adminBusinessId, null, adminBusinessId);
|
|
132
|
+
expect(resultCreditorUser.isBusinessCreditor).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('edge cases with different user IDs', () => {
|
|
136
|
+
it('should work correctly with different user ID format', () => {
|
|
137
|
+
const differentUser = 'abc-def-ghi';
|
|
138
|
+
const result = extractDocumentBusiness(businessId1, differentUser, differentUser);
|
|
139
|
+
expect(result.businessId).toBe(businessId1);
|
|
140
|
+
expect(result.isBusinessCreditor).toBe(true);
|
|
141
|
+
});
|
|
142
|
+
it('should correctly identify when user is creditor with UUID-like IDs', () => {
|
|
143
|
+
const uuidUser = '550e8400-e29b-41d4-a716-446655440000';
|
|
144
|
+
const uuidBusiness = '660e8400-e29b-41d4-a716-446655440000';
|
|
145
|
+
const result = extractDocumentBusiness(uuidUser, uuidBusiness, uuidUser);
|
|
146
|
+
expect(result.businessId).toBe(uuidBusiness);
|
|
147
|
+
expect(result.isBusinessCreditor).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=document-business.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-business.test.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__tests__/document-business.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|