@accounter/server 0.0.9-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44 → 0.0.9-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @accounter/server
2
2
 
3
- ## 0.0.9-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44
3
+ ## 0.0.9-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -304,10 +304,10 @@
304
304
  [`ef68321`](https://github.com/Urigo/accounter-fullstack/commit/ef68321608d60a7208e82a2c413f27beb502e3cc),
305
305
  [`ef68321`](https://github.com/Urigo/accounter-fullstack/commit/ef68321608d60a7208e82a2c413f27beb502e3cc),
306
306
  [`c7d6f21`](https://github.com/Urigo/accounter-fullstack/commit/c7d6f21ed62658159b1323334501daca03c8d3e5)]:
307
- - @accounter/green-invoice-graphql@0.8.3-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44
308
- - @accounter/pcn874-generator@0.6.4-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44
309
- - @accounter/shaam-uniform-format-generator@0.2.3-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44
310
- - @accounter/shaam6111-generator@0.1.5-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44
307
+ - @accounter/green-invoice-graphql@0.8.3-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e
308
+ - @accounter/pcn874-generator@0.6.4-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e
309
+ - @accounter/shaam-uniform-format-generator@0.2.3-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e
310
+ - @accounter/shaam6111-generator@0.1.5-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e
311
311
 
312
312
  ## 0.0.8
313
313
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Based on charges table schema from migrations and charges.provider.ts:
7
7
  * - Required: owner_id
8
- * - Optional: type, accountant_status, user_description, tax_category_id, optional_vat, documents_optional_flag
8
+ * - Optional: type, accountant_status, user_description, tax_category_id, optional_vat, documents_optional_flag, is_property
9
9
  *
10
10
  * @see packages/server/src/modules/charges/providers/charges.provider.ts (generateCharge query)
11
11
  * @see packages/migrations/src/actions/*-charges-*.ts (migrations)
@@ -19,6 +19,7 @@
19
19
  export interface ChargeInsertParams {
20
20
  id?: string;
21
21
  owner_id: string;
22
+ is_property?: boolean | null;
22
23
  type?: string | null;
23
24
  accountant_status?: string | null;
24
25
  user_description?: string | null;
@@ -41,6 +42,7 @@ export interface ChargeInsertParams {
41
42
  * - accountant_status defaults to 'PENDING' (database requires NOT NULL)
42
43
  * - optional_vat defaults to false (database requires NOT NULL)
43
44
  * - documents_optional_flag defaults to false (database requires NOT NULL)
45
+ * - is_property defaults to null (property-related charges can override to true)
44
46
  * - id defaults to deterministic UUID if not provided
45
47
  *
46
48
  * @example
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Based on charges table schema from migrations and charges.provider.ts:
7
7
  * - Required: owner_id
8
- * - Optional: type, accountant_status, user_description, tax_category_id, optional_vat, documents_optional_flag
8
+ * - Optional: type, accountant_status, user_description, tax_category_id, optional_vat, documents_optional_flag, is_property
9
9
  *
10
10
  * @see packages/server/src/modules/charges/providers/charges.provider.ts (generateCharge query)
11
11
  * @see packages/migrations/src/actions/*-charges-*.ts (migrations)
@@ -26,6 +26,7 @@ import { makeUUID, makeUUIDLegacy } from '../../demo-fixtures/helpers/determinis
26
26
  * - accountant_status defaults to 'PENDING' (database requires NOT NULL)
27
27
  * - optional_vat defaults to false (database requires NOT NULL)
28
28
  * - documents_optional_flag defaults to false (database requires NOT NULL)
29
+ * - is_property defaults to null (property-related charges can override to true)
29
30
  * - id defaults to deterministic UUID if not provided
30
31
  *
31
32
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"charge.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/charge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAmB7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,UAAU,YAAY,CAC1B,MAIC,EACD,SAAuC;IAEvC,OAAO;QACL,EAAE,EAAE,cAAc,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,IAAI;QACV,iBAAiB,EAAE,SAAS;QAC5B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;QACjD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;QAC3F,YAAY,EAAE,KAAK;QACnB,uBAAuB,EAAE,KAAK;QAC9B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"charge.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/charge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAoB7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,UAAU,YAAY,CAC1B,MAIC,EACD,SAAuC;IAEvC,OAAO;QACL,EAAE,EAAE,cAAc,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,IAAI;QACV,iBAAiB,EAAE,SAAS;QAC5B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;QACjD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;QAC3F,YAAY,EAAE,KAAK;QACnB,uBAAuB,EAAE,KAAK;QAC9B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -27,9 +27,10 @@ export interface TransactionInsertParams {
27
27
  event_date: string;
28
28
  debit_date?: string | null;
29
29
  amount: string;
30
- current_balance: string;
30
+ current_balance?: string;
31
31
  business_id?: string | null;
32
32
  is_fee?: boolean | null;
33
+ currency_rate?: number | null;
33
34
  }
34
35
  /**
35
36
  * Create a transaction for test fixtures
@@ -45,6 +46,7 @@ export interface TransactionInsertParams {
45
46
  * - currency is required (e.g., 'ILS', 'USD', 'EUR')
46
47
  * - event_date is required (transaction date)
47
48
  * - is_fee defaults to false (regular transaction, not a fee)
49
+ * - currency_rate defaults to null (foreign currency transactions can specify exchange rate)
48
50
  * - account_id defaults to deterministic UUID if not provided
49
51
  * - source_id defaults to deterministic UUID (raw transaction reference)
50
52
  * - source_description defaults to null
@@ -25,6 +25,7 @@ import { formatNumeric } from './money.js';
25
25
  * - currency is required (e.g., 'ILS', 'USD', 'EUR')
26
26
  * - event_date is required (transaction date)
27
27
  * - is_fee defaults to false (regular transaction, not a fee)
28
+ * - currency_rate defaults to null (foreign currency transactions can specify exchange rate)
28
29
  * - account_id defaults to deterministic UUID if not provided
29
30
  * - source_id defaults to deterministic UUID (raw transaction reference)
30
31
  * - source_description defaults to null
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyB3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAOC,EACD,SAA4C;IAE5C,OAAO;QACL,EAAE,EAAE,cAAc,EAAE;QACpB,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;QAClD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC;QAC1D,kBAAkB,EAAE,IAAI;QACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EACR,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAClD,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;QACxF,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;QAC9B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0B3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAOC,EACD,SAA4C;IAE5C,OAAO;QACL,EAAE,EAAE,cAAc,EAAE;QACpB,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;QAClD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC;QAC1D,kBAAkB,EAAE,IAAI;QACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EACR,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAClD,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;QACxF,eAAe,EAAE,GAAG;QACpB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;QAC9B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -7,7 +7,7 @@
7
7
  * @see packages/server/src/__tests__/helpers/fixture-types.ts for fixture structure
8
8
  * @see packages/server/src/__tests__/helpers/fixture-validation.ts for validation logic
9
9
  */
10
- import type { PoolClient } from 'pg';
10
+ import type { Client, PoolClient } from 'pg';
11
11
  import type { Fixture } from './fixture-types.js';
12
12
  /**
13
13
  * Custom error for fixture insertion failures
@@ -67,12 +67,16 @@ export type FixtureIdMapping = Map<string, string>;
67
67
  * - Checks referential integrity (charge IDs, business IDs, etc.)
68
68
  * - Validates required fields
69
69
  *
70
- * @param client - PostgreSQL client within an active transaction
70
+ * @param client - PostgreSQL client (PoolClient or standalone Client) within an active transaction
71
71
  * @param fixture - Complete fixture to insert
72
72
  * @returns Promise resolving to ID mapping (fixture ID → database ID)
73
73
  * @throws {Error} If fixture validation fails (via assertValidFixture)
74
74
  * @throws {FixtureInsertionError} If any insertion section fails
75
75
  *
76
+ * @remarks
77
+ * Type Safety: Accepts both PoolClient and Client to support both test transactions
78
+ * (pool.connect()) and standalone connections (new pg.Client()) used in seed scripts.
79
+ *
76
80
  * @example
77
81
  * ```typescript
78
82
  * import { withTestTransaction } from './test-transaction.js';
@@ -93,4 +97,4 @@ export type FixtureIdMapping = Map<string, string>;
93
97
  * );
94
98
  * ```
95
99
  */
96
- export declare function insertFixture(client: PoolClient, fixture: Fixture): Promise<FixtureIdMapping>;
100
+ export declare function insertFixture(client: PoolClient | Client, fixture: Fixture): Promise<FixtureIdMapping>;
@@ -70,12 +70,16 @@ export class FixtureInsertionError extends Error {
70
70
  * - Checks referential integrity (charge IDs, business IDs, etc.)
71
71
  * - Validates required fields
72
72
  *
73
- * @param client - PostgreSQL client within an active transaction
73
+ * @param client - PostgreSQL client (PoolClient or standalone Client) within an active transaction
74
74
  * @param fixture - Complete fixture to insert
75
75
  * @returns Promise resolving to ID mapping (fixture ID → database ID)
76
76
  * @throws {Error} If fixture validation fails (via assertValidFixture)
77
77
  * @throws {FixtureInsertionError} If any insertion section fails
78
78
  *
79
+ * @remarks
80
+ * Type Safety: Accepts both PoolClient and Client to support both test transactions
81
+ * (pool.connect()) and standalone connections (new pg.Client()) used in seed scripts.
82
+ *
79
83
  * @example
80
84
  * ```typescript
81
85
  * import { withTestTransaction } from './test-transaction.js';
@@ -140,13 +144,13 @@ export async function insertFixture(client, fixture) {
140
144
  business.website,
141
145
  business.phoneNumber,
142
146
  business.governmentId, // Maps to vat_number column
143
- business.exemptDealer,
144
- business.suggestions,
145
- business.optionalVat,
146
- business.country,
147
- business.pcn874RecordTypeOverride,
148
- business.isReceiptEnough,
149
- business.isDocumentsOptional,
147
+ business.exemptDealer ?? false,
148
+ business.suggestions ?? null,
149
+ business.optionalVat ?? false,
150
+ business.country ?? 'ISR',
151
+ business.pcn874RecordTypeOverride ?? null,
152
+ business.isReceiptEnough ?? false,
153
+ business.isDocumentsOptional ?? false,
150
154
  ]);
151
155
  if (entityResult.rows.length > 0) {
152
156
  idMapping.set(business.id, entityResult.rows[0].id);
@@ -172,7 +176,7 @@ export async function insertFixture(client, fixture) {
172
176
  id, hashavshevet_name, tax_excluded
173
177
  )
174
178
  VALUES ($1, $2, $3)
175
- ON CONFLICT (id) DO NOTHING`, [taxCategory.id, taxCategory.hashavshevetName, taxCategory.taxExcluded]);
179
+ ON CONFLICT (id) DO NOTHING`, [taxCategory.id, taxCategory.hashavshevetName, taxCategory.taxExcluded ?? false]);
176
180
  if (entityResult.rows.length > 0) {
177
181
  idMapping.set(taxCategory.id, entityResult.rows[0].id);
178
182
  }
@@ -235,18 +239,20 @@ export async function insertFixture(client, fixture) {
235
239
  for (const charge of fixture.charges.charges) {
236
240
  await client.query(`INSERT INTO ${qualifyTable('charges')} (
237
241
  id, owner_id, type, accountant_status, user_description,
238
- tax_category_id, optional_vat, documents_optional_flag
242
+ tax_category_id, optional_vat, documents_optional_flag,
243
+ is_property, created_at, updated_at
239
244
  )
240
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
245
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW(), NOW())
241
246
  ON CONFLICT (id) DO NOTHING`, [
242
247
  charge.id,
243
248
  charge.owner_id,
244
- charge.type,
245
- charge.accountant_status,
249
+ charge.type ?? null,
250
+ charge.accountant_status ?? 'PENDING',
246
251
  charge.user_description,
247
- charge.tax_category_id,
248
- charge.optional_vat,
249
- charge.documents_optional_flag,
252
+ charge.tax_category_id ?? null,
253
+ charge.optional_vat ?? false,
254
+ charge.documents_optional_flag ?? false,
255
+ charge.is_property ?? false,
250
256
  ]);
251
257
  idMapping.set(charge.id, charge.id);
252
258
  }
@@ -278,9 +284,10 @@ export async function insertFixture(client, fixture) {
278
284
  await client.query(`INSERT INTO ${qualifyTable('transactions')} (
279
285
  id, account_id, charge_id, source_id, source_description,
280
286
  currency, event_date, debit_date, amount, current_balance,
281
- business_id, is_fee, source_reference, source_origin, origin_key
287
+ business_id, is_fee, source_reference, source_origin, origin_key,
288
+ currency_rate, created_at, updated_at
282
289
  )
283
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)
290
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, NOW(), NOW())
284
291
  ON CONFLICT (id) DO NOTHING`, [
285
292
  transaction.id,
286
293
  accountId,
@@ -291,12 +298,13 @@ export async function insertFixture(client, fixture) {
291
298
  transaction.event_date,
292
299
  transaction.debit_date,
293
300
  transaction.amount,
294
- transaction.current_balance,
301
+ transaction.current_balance ?? '0',
295
302
  transaction.business_id,
296
- transaction.is_fee,
303
+ transaction.is_fee ?? false,
297
304
  'TEST-REF', // source_reference (NOT NULL)
298
305
  'TEST', // source_origin (NOT NULL)
299
306
  dummyEtherscanId, // origin_key (NOT NULL) - must match etherscan_id in raw list
307
+ transaction.currency_rate ?? 1,
300
308
  ]);
301
309
  idMapping.set(transaction.id, transaction.id);
302
310
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fixture-loader.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/fixture-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixture-loader.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/fixture-loader.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,7 @@
12
12
  * @see packages/server/src/__tests__/helpers/fixture-validation.ts for validation logic
13
13
  * @see packages/server/src/__tests__/helpers/fixture-loader.ts for insertion logic
14
14
  */
15
- import type { ChargeInsertParams } from '../factories/charge.js';
16
- import type { TransactionInsertParams } from '../factories/transaction.js';
17
- import type { DocumentInsertParams } from '../factories/document.js';
15
+ import type { ChargeInsertParams, TransactionInsertParams, DocumentInsertParams } from '../factories/index.js';
18
16
  import type { financial_account_type } from '../../modules/transactions/types.js';
19
17
  /**
20
18
  * Business entities in a fixture
@@ -263,16 +263,16 @@ export function assertForeignExpenseScenario(records, params) {
263
263
  const legCountApprox = Math.round(params.expectedLocalTotal / impliedPerLeg);
264
264
  // Validate each leg amount close to impliedPerLeg (within 5%)
265
265
  debitLegs.forEach((amt, i) => {
266
- expectClose(amt, impliedPerLeg, impliedPerLeg * 0.05, `Debit leg ${i} amount mismatch`);
266
+ expectClose(amt, impliedPerLeg, impliedPerLeg + 0.05, `Debit leg ${i} amount mismatch`);
267
267
  });
268
268
  creditLegs.forEach((amt, i) => {
269
- expectClose(amt, impliedPerLeg, impliedPerLeg * 0.05, `Credit leg ${i} amount mismatch`);
269
+ expectClose(amt, impliedPerLeg, impliedPerLeg + 0.05, `Credit leg ${i} amount mismatch`);
270
270
  });
271
271
  // Aggregate totals
272
272
  const totalDebit = debitLegs.reduce((a, b) => a + b, 0);
273
273
  const totalCredit = creditLegs.reduce((a, b) => a + b, 0);
274
- expectClose(totalDebit, params.expectedLocalTotal, params.expectedLocalTotal * 0.05, 'Aggregate debit total mismatch');
275
- expectClose(totalCredit, params.expectedLocalTotal, params.expectedLocalTotal * 0.05, 'Aggregate credit total mismatch');
274
+ expectClose(totalDebit, params.expectedLocalTotal, params.expectedLocalTotal + 0.05, 'Aggregate debit total mismatch');
275
+ expectClose(totalCredit, params.expectedLocalTotal, params.expectedLocalTotal + 0.05, 'Aggregate credit total mismatch');
276
276
  // Leg count heuristic
277
277
  expect(Math.abs(debitLegs.length - legCountApprox), 'Unexpected number of debit legs').toBeLessThanOrEqual(1);
278
278
  expect(Math.abs(creditLegs.length - legCountApprox), 'Unexpected number of credit legs').toBeLessThanOrEqual(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@accounter/server",
3
- "version": "0.0.9-alpha-20251211033737-29a3e4c4c745e562726ab60c423e6cedd9e22c44",
3
+ "version": "0.0.9-alpha-20251211084417-bd969ff3311bc514c5796ad31c7d5b5691e3645e",
4
4
  "type": "module",
5
5
  "description": "",
6
6
  "license": "MIT",
@@ -33,7 +33,7 @@
33
33
  "@pgtyped/cli": "2.4.3",
34
34
  "@pgtyped/runtime": "2.4.2",
35
35
  "@whatwg-node/fetch": "0.10.13",
36
- "ai": "5.0.109",
36
+ "ai": "5.0.108",
37
37
  "basic-auth": "2.0.1",
38
38
  "bcrypt": "6.0.0",
39
39
  "cloudinary": "2.8.0",
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Based on charges table schema from migrations and charges.provider.ts:
7
7
  * - Required: owner_id
8
- * - Optional: type, accountant_status, user_description, tax_category_id, optional_vat, documents_optional_flag
8
+ * - Optional: type, accountant_status, user_description, tax_category_id, optional_vat, documents_optional_flag, is_property
9
9
  *
10
10
  * @see packages/server/src/modules/charges/providers/charges.provider.ts (generateCharge query)
11
11
  * @see packages/migrations/src/actions/*-charges-*.ts (migrations)
@@ -22,6 +22,7 @@ import { makeUUID, makeUUIDLegacy } from '../../demo-fixtures/helpers/determinis
22
22
  export interface ChargeInsertParams {
23
23
  id?: string;
24
24
  owner_id: string;
25
+ is_property?: boolean | null;
25
26
  type?: string | null;
26
27
  accountant_status?: string | null;
27
28
  user_description?: string | null;
@@ -45,6 +46,7 @@ export interface ChargeInsertParams {
45
46
  * - accountant_status defaults to 'PENDING' (database requires NOT NULL)
46
47
  * - optional_vat defaults to false (database requires NOT NULL)
47
48
  * - documents_optional_flag defaults to false (database requires NOT NULL)
49
+ * - is_property defaults to null (property-related charges can override to true)
48
50
  * - id defaults to deterministic UUID if not provided
49
51
  *
50
52
  * @example
@@ -97,4 +99,4 @@ export function createCharge(
97
99
  documents_optional_flag: false,
98
100
  ...overrides,
99
101
  };
100
- }
102
+ }
@@ -31,9 +31,10 @@ export interface TransactionInsertParams {
31
31
  event_date: string;
32
32
  debit_date?: string | null;
33
33
  amount: string; // PostgreSQL numeric -> string
34
- current_balance: string; // PostgreSQL numeric -> string
34
+ current_balance?: string; // PostgreSQL numeric -> string
35
35
  business_id?: string | null;
36
36
  is_fee?: boolean | null;
37
+ currency_rate?: number | null;
37
38
  }
38
39
 
39
40
  /**
@@ -50,6 +51,7 @@ export interface TransactionInsertParams {
50
51
  * - currency is required (e.g., 'ILS', 'USD', 'EUR')
51
52
  * - event_date is required (transaction date)
52
53
  * - is_fee defaults to false (regular transaction, not a fee)
54
+ * - currency_rate defaults to null (foreign currency transactions can specify exchange rate)
53
55
  * - account_id defaults to deterministic UUID if not provided
54
56
  * - source_id defaults to deterministic UUID (raw transaction reference)
55
57
  * - source_description defaults to null
@@ -8,7 +8,7 @@
8
8
  * @see packages/server/src/__tests__/helpers/fixture-validation.ts for validation logic
9
9
  */
10
10
 
11
- import type { PoolClient } from 'pg';
11
+ import type { Client, PoolClient } from 'pg';
12
12
  import type { Fixture } from './fixture-types.js';
13
13
  import { assertValidFixture } from './fixture-validation.js';
14
14
  import { qualifyTable } from './test-db-config.js';
@@ -85,12 +85,16 @@ export type FixtureIdMapping = Map<string, string>;
85
85
  * - Checks referential integrity (charge IDs, business IDs, etc.)
86
86
  * - Validates required fields
87
87
  *
88
- * @param client - PostgreSQL client within an active transaction
88
+ * @param client - PostgreSQL client (PoolClient or standalone Client) within an active transaction
89
89
  * @param fixture - Complete fixture to insert
90
90
  * @returns Promise resolving to ID mapping (fixture ID → database ID)
91
91
  * @throws {Error} If fixture validation fails (via assertValidFixture)
92
92
  * @throws {FixtureInsertionError} If any insertion section fails
93
93
  *
94
+ * @remarks
95
+ * Type Safety: Accepts both PoolClient and Client to support both test transactions
96
+ * (pool.connect()) and standalone connections (new pg.Client()) used in seed scripts.
97
+ *
94
98
  * @example
95
99
  * ```typescript
96
100
  * import { withTestTransaction } from './test-transaction.js';
@@ -112,7 +116,7 @@ export type FixtureIdMapping = Map<string, string>;
112
116
  * ```
113
117
  */
114
118
  export async function insertFixture(
115
- client: PoolClient,
119
+ client: PoolClient | Client,
116
120
  fixture: Fixture,
117
121
  ): Promise<FixtureIdMapping> {
118
122
  // Validate fixture before insertion
@@ -174,13 +178,13 @@ export async function insertFixture(
174
178
  business.website,
175
179
  business.phoneNumber,
176
180
  business.governmentId, // Maps to vat_number column
177
- business.exemptDealer,
178
- business.suggestions,
179
- business.optionalVat,
180
- business.country,
181
- business.pcn874RecordTypeOverride,
182
- business.isReceiptEnough,
183
- business.isDocumentsOptional,
181
+ business.exemptDealer ?? false,
182
+ business.suggestions ?? null,
183
+ business.optionalVat ?? false,
184
+ business.country ?? 'ISR',
185
+ business.pcn874RecordTypeOverride ?? null,
186
+ business.isReceiptEnough ?? false,
187
+ business.isDocumentsOptional ?? false,
184
188
  ],
185
189
  );
186
190
 
@@ -214,7 +218,7 @@ export async function insertFixture(
214
218
  )
215
219
  VALUES ($1, $2, $3)
216
220
  ON CONFLICT (id) DO NOTHING`,
217
- [taxCategory.id, taxCategory.hashavshevetName, taxCategory.taxExcluded],
221
+ [taxCategory.id, taxCategory.hashavshevetName, taxCategory.taxExcluded ?? false],
218
222
  );
219
223
 
220
224
  if (entityResult.rows.length > 0) {
@@ -293,19 +297,21 @@ export async function insertFixture(
293
297
  await client.query(
294
298
  `INSERT INTO ${qualifyTable('charges')} (
295
299
  id, owner_id, type, accountant_status, user_description,
296
- tax_category_id, optional_vat, documents_optional_flag
300
+ tax_category_id, optional_vat, documents_optional_flag,
301
+ is_property, created_at, updated_at
297
302
  )
298
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
303
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW(), NOW())
299
304
  ON CONFLICT (id) DO NOTHING`,
300
305
  [
301
306
  charge.id,
302
307
  charge.owner_id,
303
- charge.type,
304
- charge.accountant_status,
308
+ charge.type ?? null,
309
+ charge.accountant_status ?? 'PENDING',
305
310
  charge.user_description,
306
- charge.tax_category_id,
307
- charge.optional_vat,
308
- charge.documents_optional_flag,
311
+ charge.tax_category_id ?? null,
312
+ charge.optional_vat ?? false,
313
+ charge.documents_optional_flag ?? false,
314
+ charge.is_property ?? false,
309
315
  ],
310
316
  );
311
317
 
@@ -349,9 +355,10 @@ export async function insertFixture(
349
355
  `INSERT INTO ${qualifyTable('transactions')} (
350
356
  id, account_id, charge_id, source_id, source_description,
351
357
  currency, event_date, debit_date, amount, current_balance,
352
- business_id, is_fee, source_reference, source_origin, origin_key
358
+ business_id, is_fee, source_reference, source_origin, origin_key,
359
+ currency_rate, created_at, updated_at
353
360
  )
354
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)
361
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, NOW(), NOW())
355
362
  ON CONFLICT (id) DO NOTHING`,
356
363
  [
357
364
  transaction.id,
@@ -363,12 +370,13 @@ export async function insertFixture(
363
370
  transaction.event_date,
364
371
  transaction.debit_date,
365
372
  transaction.amount,
366
- transaction.current_balance,
373
+ transaction.current_balance ?? '0',
367
374
  transaction.business_id,
368
- transaction.is_fee,
375
+ transaction.is_fee ?? false,
369
376
  'TEST-REF', // source_reference (NOT NULL)
370
377
  'TEST', // source_origin (NOT NULL)
371
378
  dummyEtherscanId, // origin_key (NOT NULL) - must match etherscan_id in raw list
379
+ transaction.currency_rate ?? 1,
372
380
  ],
373
381
  );
374
382
 
@@ -13,9 +13,7 @@
13
13
  * @see packages/server/src/__tests__/helpers/fixture-loader.ts for insertion logic
14
14
  */
15
15
 
16
- import type { ChargeInsertParams } from '../factories/charge.js';
17
- import type { TransactionInsertParams } from '../factories/transaction.js';
18
- import type { DocumentInsertParams } from '../factories/document.js';
16
+ import type { ChargeInsertParams, TransactionInsertParams, DocumentInsertParams } from '../factories/index.js';
19
17
  import type { financial_account_type } from '../../modules/transactions/types.js';
20
18
 
21
19
  /**
@@ -324,18 +324,17 @@ export function assertForeignExpenseScenario(records: LedgerRecord[], params: {
324
324
  const legCountApprox = Math.round(params.expectedLocalTotal / impliedPerLeg);
325
325
  // Validate each leg amount close to impliedPerLeg (within 5%)
326
326
  debitLegs.forEach((amt, i) => {
327
- expectClose(amt, impliedPerLeg, impliedPerLeg * 0.05, `Debit leg ${i} amount mismatch`);
327
+ expectClose(amt, impliedPerLeg, impliedPerLeg + 0.05, `Debit leg ${i} amount mismatch`);
328
328
  });
329
329
  creditLegs.forEach((amt, i) => {
330
- expectClose(amt, impliedPerLeg, impliedPerLeg * 0.05, `Credit leg ${i} amount mismatch`);
330
+ expectClose(amt, impliedPerLeg, impliedPerLeg + 0.05, `Credit leg ${i} amount mismatch`);
331
331
  });
332
332
  // Aggregate totals
333
333
  const totalDebit = debitLegs.reduce((a, b) => a + b, 0);
334
334
  const totalCredit = creditLegs.reduce((a, b) => a + b, 0);
335
- expectClose(totalDebit, params.expectedLocalTotal, params.expectedLocalTotal * 0.05, 'Aggregate debit total mismatch');
336
- expectClose(totalCredit, params.expectedLocalTotal, params.expectedLocalTotal * 0.05, 'Aggregate credit total mismatch');
335
+ expectClose(totalDebit, params.expectedLocalTotal, params.expectedLocalTotal + 0.05, 'Aggregate debit total mismatch');
336
+ expectClose(totalCredit, params.expectedLocalTotal, params.expectedLocalTotal + 0.05, 'Aggregate credit total mismatch');
337
337
  // Leg count heuristic
338
338
  expect(Math.abs(debitLegs.length - legCountApprox), 'Unexpected number of debit legs').toBeLessThanOrEqual(1);
339
339
  expect(Math.abs(creditLegs.length - legCountApprox), 'Unexpected number of credit legs').toBeLessThanOrEqual(1);
340
340
  }
341
-
@@ -46,7 +46,7 @@ describe('Ledger Generation - Expense Scenario A', () => {
46
46
  const chargeId = makeUUID('charge', 'charge-office-supplies');
47
47
  await client.query(
48
48
  `DELETE FROM ${qualifyTable('ledger_records')} WHERE charge_id = $1`,
49
- [chargeId],
49
+ [chargeId]
50
50
  );
51
51
  // Also clear the scenario's fixture rows to keep DB tidy
52
52
  await client.query(
@@ -55,7 +55,7 @@ describe('Ledger Generation - Expense Scenario A', () => {
55
55
  );
56
56
  await client.query(
57
57
  `DELETE FROM ${qualifyTable('transactions')} WHERE charge_id = $1`,
58
- [chargeId],
58
+ [chargeId]
59
59
  );
60
60
  await client.query(
61
61
  `DELETE FROM ${qualifyTable('charges')} WHERE id = $1`,