@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.
Files changed (178) hide show
  1. package/CHANGELOG.md +47 -7
  2. package/dist/green-invoice-graphql/src/mesh-artifacts/index.d.ts +1 -1
  3. package/dist/server/src/__generated__/types.d.ts +77 -0
  4. package/dist/server/src/__generated__/types.js.map +1 -1
  5. package/dist/server/src/modules/charges-matcher/__generated__/types.d.ts +68 -0
  6. package/dist/server/src/modules/charges-matcher/__generated__/types.js +7 -0
  7. package/dist/server/src/modules/charges-matcher/__generated__/types.js.map +1 -0
  8. package/dist/server/src/modules/charges-matcher/__tests__/amount-confidence.test.d.ts +1 -0
  9. package/dist/server/src/modules/charges-matcher/__tests__/amount-confidence.test.js +218 -0
  10. package/dist/server/src/modules/charges-matcher/__tests__/amount-confidence.test.js.map +1 -0
  11. package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.d.ts +1 -0
  12. package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js +645 -0
  13. package/dist/server/src/modules/charges-matcher/__tests__/auto-match-integration.test.js.map +1 -0
  14. package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.d.ts +1 -0
  15. package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js +530 -0
  16. package/dist/server/src/modules/charges-matcher/__tests__/auto-match.test.js.map +1 -0
  17. package/dist/server/src/modules/charges-matcher/__tests__/business-confidence.test.d.ts +1 -0
  18. package/dist/server/src/modules/charges-matcher/__tests__/business-confidence.test.js +143 -0
  19. package/dist/server/src/modules/charges-matcher/__tests__/business-confidence.test.js.map +1 -0
  20. package/dist/server/src/modules/charges-matcher/__tests__/candidate-filter.test.d.ts +1 -0
  21. package/dist/server/src/modules/charges-matcher/__tests__/candidate-filter.test.js +186 -0
  22. package/dist/server/src/modules/charges-matcher/__tests__/candidate-filter.test.js.map +1 -0
  23. package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.d.ts +1 -0
  24. package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js +301 -0
  25. package/dist/server/src/modules/charges-matcher/__tests__/charge-validator.test.js.map +1 -0
  26. package/dist/server/src/modules/charges-matcher/__tests__/currency-confidence.test.d.ts +1 -0
  27. package/dist/server/src/modules/charges-matcher/__tests__/currency-confidence.test.js +127 -0
  28. package/dist/server/src/modules/charges-matcher/__tests__/currency-confidence.test.js.map +1 -0
  29. package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.d.ts +1 -0
  30. package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js +246 -0
  31. package/dist/server/src/modules/charges-matcher/__tests__/date-confidence.test.js.map +1 -0
  32. package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.d.ts +1 -0
  33. package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.js +475 -0
  34. package/dist/server/src/modules/charges-matcher/__tests__/document-aggregator.test.js.map +1 -0
  35. package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.d.ts +1 -0
  36. package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js +287 -0
  37. package/dist/server/src/modules/charges-matcher/__tests__/document-amount.test.js.map +1 -0
  38. package/dist/server/src/modules/charges-matcher/__tests__/document-business.test.d.ts +1 -0
  39. package/dist/server/src/modules/charges-matcher/__tests__/document-business.test.js +151 -0
  40. package/dist/server/src/modules/charges-matcher/__tests__/document-business.test.js.map +1 -0
  41. package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.d.ts +1 -0
  42. package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js +550 -0
  43. package/dist/server/src/modules/charges-matcher/__tests__/match-scorer.test.js.map +1 -0
  44. package/dist/server/src/modules/charges-matcher/__tests__/overall-confidence.test.d.ts +1 -0
  45. package/dist/server/src/modules/charges-matcher/__tests__/overall-confidence.test.js +410 -0
  46. package/dist/server/src/modules/charges-matcher/__tests__/overall-confidence.test.js.map +1 -0
  47. package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.d.ts +1 -0
  48. package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js +504 -0
  49. package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js.map +1 -0
  50. package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.d.ts +1 -0
  51. package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js +483 -0
  52. package/dist/server/src/modules/charges-matcher/__tests__/single-match.test.js.map +1 -0
  53. package/dist/server/src/modules/charges-matcher/__tests__/test-helpers.d.ts +46 -0
  54. package/dist/server/src/modules/charges-matcher/__tests__/test-helpers.js +143 -0
  55. package/dist/server/src/modules/charges-matcher/__tests__/test-helpers.js.map +1 -0
  56. package/dist/server/src/modules/charges-matcher/__tests__/test-infrastructure.spec.d.ts +1 -0
  57. package/dist/server/src/modules/charges-matcher/__tests__/test-infrastructure.spec.js +137 -0
  58. package/dist/server/src/modules/charges-matcher/__tests__/test-infrastructure.spec.js.map +1 -0
  59. package/dist/server/src/modules/charges-matcher/__tests__/transaction-aggregator.test.d.ts +1 -0
  60. package/dist/server/src/modules/charges-matcher/__tests__/transaction-aggregator.test.js +415 -0
  61. package/dist/server/src/modules/charges-matcher/__tests__/transaction-aggregator.test.js.map +1 -0
  62. package/dist/server/src/modules/charges-matcher/helpers/amount-confidence.helper.d.ts +7 -0
  63. package/dist/server/src/modules/charges-matcher/helpers/amount-confidence.helper.js +70 -0
  64. package/dist/server/src/modules/charges-matcher/helpers/amount-confidence.helper.js.map +1 -0
  65. package/dist/server/src/modules/charges-matcher/helpers/business-confidence.helper.d.ts +7 -0
  66. package/dist/server/src/modules/charges-matcher/helpers/business-confidence.helper.js +19 -0
  67. package/dist/server/src/modules/charges-matcher/helpers/business-confidence.helper.js.map +1 -0
  68. package/dist/server/src/modules/charges-matcher/helpers/candidate-filter.helper.d.ts +24 -0
  69. package/dist/server/src/modules/charges-matcher/helpers/candidate-filter.helper.js +45 -0
  70. package/dist/server/src/modules/charges-matcher/helpers/candidate-filter.helper.js.map +1 -0
  71. package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.d.ts +33 -0
  72. package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js +65 -0
  73. package/dist/server/src/modules/charges-matcher/helpers/charge-validator.helper.js.map +1 -0
  74. package/dist/server/src/modules/charges-matcher/helpers/currency-confidence.helper.d.ts +7 -0
  75. package/dist/server/src/modules/charges-matcher/helpers/currency-confidence.helper.js +18 -0
  76. package/dist/server/src/modules/charges-matcher/helpers/currency-confidence.helper.js.map +1 -0
  77. package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.d.ts +7 -0
  78. package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js +35 -0
  79. package/dist/server/src/modules/charges-matcher/helpers/date-confidence.helper.js.map +1 -0
  80. package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.d.ts +49 -0
  81. package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js +58 -0
  82. package/dist/server/src/modules/charges-matcher/helpers/document-amount.helper.js.map +1 -0
  83. package/dist/server/src/modules/charges-matcher/helpers/document-business.helper.d.ts +13 -0
  84. package/dist/server/src/modules/charges-matcher/helpers/document-business.helper.js +37 -0
  85. package/dist/server/src/modules/charges-matcher/helpers/document-business.helper.js.map +1 -0
  86. package/dist/server/src/modules/charges-matcher/helpers/overall-confidence.helper.d.ts +42 -0
  87. package/dist/server/src/modules/charges-matcher/helpers/overall-confidence.helper.js +77 -0
  88. package/dist/server/src/modules/charges-matcher/helpers/overall-confidence.helper.js.map +1 -0
  89. package/dist/server/src/modules/charges-matcher/index.d.ts +3 -0
  90. package/dist/server/src/modules/charges-matcher/index.js +15 -0
  91. package/dist/server/src/modules/charges-matcher/index.js.map +1 -0
  92. package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.d.ts +48 -0
  93. package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js +133 -0
  94. package/dist/server/src/modules/charges-matcher/providers/auto-match.provider.js.map +1 -0
  95. package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.d.ts +38 -0
  96. package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js +248 -0
  97. package/dist/server/src/modules/charges-matcher/providers/charges-matcher.provider.js.map +1 -0
  98. package/dist/server/src/modules/charges-matcher/providers/document-aggregator.d.ts +61 -0
  99. package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js +153 -0
  100. package/dist/server/src/modules/charges-matcher/providers/document-aggregator.js.map +1 -0
  101. package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.d.ts +25 -0
  102. package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js +114 -0
  103. package/dist/server/src/modules/charges-matcher/providers/match-scorer.provider.js.map +1 -0
  104. package/dist/server/src/modules/charges-matcher/providers/single-match.provider.d.ts +39 -0
  105. package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js +189 -0
  106. package/dist/server/src/modules/charges-matcher/providers/single-match.provider.js.map +1 -0
  107. package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.d.ts +54 -0
  108. package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.js +93 -0
  109. package/dist/server/src/modules/charges-matcher/providers/transaction-aggregator.js.map +1 -0
  110. package/dist/server/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.d.ts +2 -0
  111. package/dist/server/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.js +22 -0
  112. package/dist/server/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.js.map +1 -0
  113. package/dist/server/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.d.ts +2 -0
  114. package/dist/server/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.js +24 -0
  115. package/dist/server/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.js.map +1 -0
  116. package/dist/server/src/modules/charges-matcher/resolvers/index.d.ts +2 -0
  117. package/dist/server/src/modules/charges-matcher/resolvers/index.js +11 -0
  118. package/dist/server/src/modules/charges-matcher/resolvers/index.js.map +1 -0
  119. package/dist/server/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.d.ts +2 -0
  120. package/dist/server/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.js +47 -0
  121. package/dist/server/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.js.map +1 -0
  122. package/dist/server/src/modules/charges-matcher/types.d.ts +179 -0
  123. package/dist/server/src/modules/charges-matcher/types.js +14 -0
  124. package/dist/server/src/modules/charges-matcher/types.js.map +1 -0
  125. package/dist/server/src/modules/documents/resolvers/document-suggestions.resolver.js +2 -2
  126. package/dist/server/src/modules/documents/resolvers/document-suggestions.resolver.js.map +1 -1
  127. package/dist/server/src/modules-app.js +2 -0
  128. package/dist/server/src/modules-app.js.map +1 -1
  129. package/dist/server/src/shared/types/index.d.ts +1 -1
  130. package/package.json +4 -4
  131. package/src/__generated__/types.ts +87 -0
  132. package/src/modules/charges-matcher/README.md +279 -0
  133. package/src/modules/charges-matcher/__generated__/types.ts +71 -0
  134. package/src/modules/charges-matcher/__tests__/amount-confidence.test.ts +260 -0
  135. package/src/modules/charges-matcher/__tests__/auto-match-integration.test.ts +714 -0
  136. package/src/modules/charges-matcher/__tests__/auto-match.test.ts +621 -0
  137. package/src/modules/charges-matcher/__tests__/business-confidence.test.ts +177 -0
  138. package/src/modules/charges-matcher/__tests__/candidate-filter.test.ts +238 -0
  139. package/src/modules/charges-matcher/__tests__/charge-validator.test.ts +374 -0
  140. package/src/modules/charges-matcher/__tests__/currency-confidence.test.ts +164 -0
  141. package/src/modules/charges-matcher/__tests__/date-confidence.test.ts +291 -0
  142. package/src/modules/charges-matcher/__tests__/document-aggregator.test.ts +614 -0
  143. package/src/modules/charges-matcher/__tests__/document-amount.test.ts +352 -0
  144. package/src/modules/charges-matcher/__tests__/document-business.test.ts +192 -0
  145. package/src/modules/charges-matcher/__tests__/match-scorer.test.ts +659 -0
  146. package/src/modules/charges-matcher/__tests__/overall-confidence.test.ts +502 -0
  147. package/src/modules/charges-matcher/__tests__/single-match-integration.test.ts +556 -0
  148. package/src/modules/charges-matcher/__tests__/single-match.test.ts +608 -0
  149. package/src/modules/charges-matcher/__tests__/test-helpers.ts +174 -0
  150. package/src/modules/charges-matcher/__tests__/test-infrastructure.spec.ts +177 -0
  151. package/src/modules/charges-matcher/__tests__/transaction-aggregator.test.ts +547 -0
  152. package/src/modules/charges-matcher/documentation/README.md +331 -0
  153. package/src/modules/charges-matcher/documentation/SPEC.md +1503 -0
  154. package/src/modules/charges-matcher/documentation/TODO.md +799 -0
  155. package/src/modules/charges-matcher/helpers/amount-confidence.helper.ts +88 -0
  156. package/src/modules/charges-matcher/helpers/business-confidence.helper.ts +23 -0
  157. package/src/modules/charges-matcher/helpers/candidate-filter.helper.ts +56 -0
  158. package/src/modules/charges-matcher/helpers/charge-validator.helper.ts +100 -0
  159. package/src/modules/charges-matcher/helpers/currency-confidence.helper.ts +22 -0
  160. package/src/modules/charges-matcher/helpers/date-confidence.helper.ts +41 -0
  161. package/src/modules/charges-matcher/helpers/document-amount.helper.ts +77 -0
  162. package/src/modules/charges-matcher/helpers/document-business.helper.ts +54 -0
  163. package/src/modules/charges-matcher/helpers/overall-confidence.helper.ts +90 -0
  164. package/src/modules/charges-matcher/index.ts +17 -0
  165. package/src/modules/charges-matcher/providers/auto-match.provider.ts +176 -0
  166. package/src/modules/charges-matcher/providers/charges-matcher.provider.ts +322 -0
  167. package/src/modules/charges-matcher/providers/document-aggregator.ts +211 -0
  168. package/src/modules/charges-matcher/providers/match-scorer.provider.ts +154 -0
  169. package/src/modules/charges-matcher/providers/single-match.provider.ts +252 -0
  170. package/src/modules/charges-matcher/providers/transaction-aggregator.ts +131 -0
  171. package/src/modules/charges-matcher/resolvers/auto-match-charges.resolver.ts +23 -0
  172. package/src/modules/charges-matcher/resolvers/find-charge-matches.resolver.ts +25 -0
  173. package/src/modules/charges-matcher/resolvers/index.ts +12 -0
  174. package/src/modules/charges-matcher/typeDefs/charges-matcher.graphql.ts +47 -0
  175. package/src/modules/charges-matcher/types.ts +200 -0
  176. package/src/modules/documents/resolvers/document-suggestions.resolver.ts +2 -2
  177. package/src/modules-app.ts +2 -0
  178. package/src/shared/types/index.ts +1 -1
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Factory for creating mock transactions for testing
3
+ */
4
+ export function createMockTransaction(overrides = {}) {
5
+ const defaultTransaction = {
6
+ id: `tx-${Math.random()}`,
7
+ account_id: 'account-1',
8
+ charge_id: 'charge-1',
9
+ source_id: 'source-1',
10
+ source_description: 'Test transaction',
11
+ currency: 'USD',
12
+ event_date: new Date('2024-01-15'),
13
+ debit_date: new Date('2024-01-16'),
14
+ debit_date_override: null,
15
+ debit_timestamp: new Date('2024-01-16T10:00:00Z'),
16
+ amount: '100.00',
17
+ current_balance: '1000.00',
18
+ business_id: 'business-a',
19
+ created_at: new Date('2024-01-15T08:00:00Z'),
20
+ updated_at: new Date('2024-01-15T08:00:00Z'),
21
+ is_fee: false,
22
+ counter_account: 'counter-1',
23
+ currency_rate: '1.0',
24
+ origin_key: 'test-origin',
25
+ source_origin: 'test-bank',
26
+ source_reference: 'test-ref-001',
27
+ };
28
+ return { ...defaultTransaction, ...overrides };
29
+ }
30
+ /**
31
+ * Factory for creating mock documents for testing
32
+ */
33
+ export function createMockDocument(overrides = {}) {
34
+ const defaultDocument = {
35
+ id: `doc-${Math.random()}`,
36
+ charge_id: 'charge-1',
37
+ creditor_id: 'business-a',
38
+ debtor_id: 'user-123',
39
+ currency_code: 'USD',
40
+ date: new Date('2024-01-14'),
41
+ total_amount: 100.0,
42
+ type: 'INVOICE',
43
+ vat_amount: 17.0,
44
+ no_vat_amount: '83.00',
45
+ serial_number: 'INV-001',
46
+ is_reviewed: false,
47
+ created_at: new Date('2024-01-14T08:00:00Z'),
48
+ modified_at: new Date('2024-01-14T08:00:00Z'),
49
+ image_url: null,
50
+ file_url: null,
51
+ allocation_number: null,
52
+ exchange_rate_override: null,
53
+ file_hash: null,
54
+ vat_report_date_override: null,
55
+ };
56
+ return { ...defaultDocument, ...overrides };
57
+ }
58
+ /**
59
+ * Factory for creating mock aggregated transaction data
60
+ */
61
+ export function createMockAggregatedTransaction(overrides = {}) {
62
+ const defaultAggregated = {
63
+ amount: 100.0,
64
+ currency: 'USD',
65
+ businessId: 'business-a',
66
+ date: new Date('2024-01-15'),
67
+ debitDate: new Date('2024-01-16'),
68
+ description: 'Test transaction',
69
+ };
70
+ return { ...defaultAggregated, ...overrides };
71
+ }
72
+ /**
73
+ * Factory for creating mock aggregated document data
74
+ */
75
+ export function createMockAggregatedDocument(overrides = {}) {
76
+ const defaultAggregated = {
77
+ amount: 100.0,
78
+ currency: 'USD',
79
+ businessId: 'business-a',
80
+ date: new Date('2024-01-14'),
81
+ description: 'INV-001',
82
+ type: 'INVOICE',
83
+ businessIsCreditor: false,
84
+ };
85
+ return { ...defaultAggregated, ...overrides };
86
+ }
87
+ /**
88
+ * Factory for creating mock confidence scores
89
+ */
90
+ export function createMockConfidenceScores(overrides = {}) {
91
+ const defaultScores = {
92
+ amount: 1.0,
93
+ currency: 1.0,
94
+ business: 1.0,
95
+ date: 1.0,
96
+ };
97
+ return { ...defaultScores, ...overrides };
98
+ }
99
+ /**
100
+ * Factory for creating mock charge matches
101
+ */
102
+ export function createMockChargeMatch(overrides = {}) {
103
+ const defaultMatch = {
104
+ chargeId: '00000000-0000-0000-0000-000000000099',
105
+ confidenceScore: 0.95,
106
+ };
107
+ return { ...defaultMatch, ...overrides };
108
+ }
109
+ /**
110
+ * Helper to calculate expected overall confidence score
111
+ * Formula: (amount × 0.4) + (currency × 0.2) + (business × 0.3) + (date × 0.1)
112
+ */
113
+ export function calculateExpectedConfidence(scores) {
114
+ return scores.amount * 0.4 + scores.currency * 0.2 + scores.business * 0.3 + scores.date * 0.1;
115
+ }
116
+ /**
117
+ * Helper to round confidence score to 2 decimal places
118
+ */
119
+ export function roundConfidence(score) {
120
+ return Math.round(score * 100) / 100;
121
+ }
122
+ /**
123
+ * Helper to validate a confidence score is within valid range
124
+ */
125
+ export function isValidConfidenceScore(score) {
126
+ return score >= 0.0 && score <= 1.0;
127
+ }
128
+ /**
129
+ * Helper to check if a date is within N days of another date
130
+ */
131
+ export function isWithinDays(date1, date2, days) {
132
+ const diffMs = Math.abs(date1.getTime() - date2.getTime());
133
+ const diffDays = diffMs / (1000 * 60 * 60 * 24);
134
+ return diffDays <= days;
135
+ }
136
+ /**
137
+ * Helper to calculate days difference between two dates
138
+ */
139
+ export function daysDifference(date1, date2) {
140
+ const diffMs = Math.abs(date1.getTime() - date2.getTime());
141
+ return Math.floor(diffMs / (1000 * 60 * 60 * 24));
142
+ }
143
+ //# sourceMappingURL=test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__tests__/test-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createMockTransaction, createMockDocument, createMockAggregatedTransaction, createMockAggregatedDocument, createMockConfidenceScores, calculateExpectedConfidence, roundConfidence, isValidConfidenceScore, daysDifference, isWithinDays, } from './test-helpers.js';
3
+ describe('Charges Matcher - Test Infrastructure', () => {
4
+ describe('Mock Factories', () => {
5
+ it('should create a valid mock transaction with defaults', () => {
6
+ const transaction = createMockTransaction();
7
+ expect(transaction.id).toBeDefined();
8
+ expect(transaction.charge_id).toBeDefined();
9
+ expect(transaction.amount).toBe('100.00');
10
+ expect(transaction.currency).toBe('USD');
11
+ expect(transaction.is_fee).toBe(false);
12
+ });
13
+ it('should create a mock transaction with overrides', () => {
14
+ const transaction = createMockTransaction({
15
+ amount: '250.00',
16
+ currency: 'USD',
17
+ is_fee: true,
18
+ });
19
+ expect(transaction.amount).toBe('250.00');
20
+ expect(transaction.currency).toBe('USD');
21
+ expect(transaction.is_fee).toBe(true);
22
+ });
23
+ it('should create a valid mock document with defaults', () => {
24
+ const document = createMockDocument();
25
+ expect(document.id).toBeDefined();
26
+ expect(document.charge_id).toBeDefined();
27
+ expect(document.total_amount).toBe(100.0);
28
+ expect(document.currency_code).toBe('USD');
29
+ expect(document.type).toBe('INVOICE');
30
+ });
31
+ it('should create a mock document with overrides', () => {
32
+ const document = createMockDocument({
33
+ total_amount: 500.0,
34
+ type: 'RECEIPT',
35
+ serial_number: 'REC-123',
36
+ });
37
+ expect(document.total_amount).toBe(500.0);
38
+ expect(document.type).toBe('RECEIPT');
39
+ expect(document.serial_number).toBe('REC-123');
40
+ });
41
+ it('should create aggregated transaction data', () => {
42
+ const aggregated = createMockAggregatedTransaction({
43
+ amount: 150.0,
44
+ description: 'Payment for services',
45
+ });
46
+ expect(aggregated.amount).toBe(150.0);
47
+ expect(aggregated.description).toBe('Payment for services');
48
+ });
49
+ it('should create aggregated document data', () => {
50
+ const aggregated = createMockAggregatedDocument({
51
+ amount: 200.0,
52
+ businessIsCreditor: true,
53
+ });
54
+ expect(aggregated.amount).toBe(200.0);
55
+ expect(aggregated.businessIsCreditor).toBe(true);
56
+ });
57
+ });
58
+ describe('Confidence Calculation Helpers', () => {
59
+ it('should calculate expected confidence with perfect scores', () => {
60
+ const scores = createMockConfidenceScores({
61
+ amount: 1.0,
62
+ currency: 1.0,
63
+ business: 1.0,
64
+ date: 1.0,
65
+ });
66
+ const confidence = calculateExpectedConfidence(scores);
67
+ expect(confidence).toBeCloseTo(1.0, 10);
68
+ });
69
+ it('should calculate expected confidence with mixed scores', () => {
70
+ const scores = createMockConfidenceScores({
71
+ amount: 0.9, // 40% weight
72
+ currency: 1.0, // 20% weight
73
+ business: 0.5, // 30% weight
74
+ date: 0.8, // 10% weight
75
+ });
76
+ // (0.9 * 0.4) + (1.0 * 0.2) + (0.5 * 0.3) + (0.8 * 0.1)
77
+ // = 0.36 + 0.2 + 0.15 + 0.08 = 0.79
78
+ const confidence = calculateExpectedConfidence(scores);
79
+ expect(confidence).toBe(0.79);
80
+ });
81
+ it('should calculate expected confidence with zero scores', () => {
82
+ const scores = createMockConfidenceScores({
83
+ amount: 0.0,
84
+ currency: 0.0,
85
+ business: 0.0,
86
+ date: 0.0,
87
+ });
88
+ const confidence = calculateExpectedConfidence(scores);
89
+ expect(confidence).toBe(0.0);
90
+ });
91
+ it('should round confidence to 2 decimal places', () => {
92
+ expect(roundConfidence(0.956789)).toBe(0.96);
93
+ expect(roundConfidence(0.951)).toBe(0.95);
94
+ expect(roundConfidence(0.9)).toBe(0.9);
95
+ expect(roundConfidence(1.0)).toBe(1.0);
96
+ });
97
+ it('should validate confidence scores', () => {
98
+ expect(isValidConfidenceScore(0.0)).toBe(true);
99
+ expect(isValidConfidenceScore(0.5)).toBe(true);
100
+ expect(isValidConfidenceScore(1.0)).toBe(true);
101
+ expect(isValidConfidenceScore(-0.1)).toBe(false);
102
+ expect(isValidConfidenceScore(1.1)).toBe(false);
103
+ });
104
+ });
105
+ describe('Date Helpers', () => {
106
+ it('should calculate days difference correctly', () => {
107
+ const date1 = new Date('2024-01-15');
108
+ const date2 = new Date('2024-01-20');
109
+ expect(daysDifference(date1, date2)).toBe(5);
110
+ });
111
+ it('should handle same dates', () => {
112
+ const date = new Date('2024-01-15');
113
+ expect(daysDifference(date, date)).toBe(0);
114
+ });
115
+ it('should calculate difference regardless of order', () => {
116
+ const date1 = new Date('2024-01-15');
117
+ const date2 = new Date('2024-01-10');
118
+ expect(daysDifference(date1, date2)).toBe(5);
119
+ expect(daysDifference(date2, date1)).toBe(5);
120
+ });
121
+ it('should check if dates are within N days', () => {
122
+ const date1 = new Date('2024-01-15');
123
+ const date2 = new Date('2024-01-20');
124
+ expect(isWithinDays(date1, date2, 5)).toBe(true);
125
+ expect(isWithinDays(date1, date2, 4)).toBe(false);
126
+ expect(isWithinDays(date1, date2, 10)).toBe(true);
127
+ });
128
+ it('should handle 12-month window check', () => {
129
+ const date1 = new Date('2024-01-15');
130
+ const date2 = new Date('2024-12-15');
131
+ const date3 = new Date('2025-02-15');
132
+ expect(isWithinDays(date1, date2, 365)).toBe(true);
133
+ expect(isWithinDays(date1, date3, 365)).toBe(false);
134
+ });
135
+ });
136
+ });
137
+ //# sourceMappingURL=test-infrastructure.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-infrastructure.spec.js","sourceRoot":"","sources":["../../../../../../src/modules/charges-matcher/__tests__/test-infrastructure.spec.ts"],"names":[],"mappings":"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"}