@accounter/server 0.0.9-alpha-20251231083050-a0e737863ca2a9fa68506d15357e55d9287972cb → 0.0.9-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
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 +27 -5
- package/README.md +66 -3
- package/dist/server/scripts/seed-admin-context.js +20 -25
- package/dist/server/scripts/seed-admin-context.js.map +1 -1
- package/dist/server/src/__tests__/db-bootstrap.test.js +7 -2
- package/dist/server/src/__tests__/db-bootstrap.test.js.map +1 -1
- package/dist/server/src/__tests__/factories/business.d.ts +1 -1
- package/dist/server/src/__tests__/factories/financial-account.d.ts +1 -1
- package/dist/server/src/__tests__/factories/index.test.js +1 -0
- package/dist/server/src/__tests__/factories/index.test.js.map +1 -1
- package/dist/server/src/__tests__/factories/tax-category.d.ts +1 -1
- package/dist/server/src/__tests__/factories/tax-category.js +1 -1
- package/dist/server/src/__tests__/factories/tax-category.js.map +1 -1
- package/dist/server/src/__tests__/factories/tax-category.test.js +8 -6
- package/dist/server/src/__tests__/factories/tax-category.test.js.map +1 -1
- package/dist/server/src/__tests__/helpers/fixture-loader.d.ts +1 -1
- package/dist/server/src/__tests__/helpers/fixture-loader.js +25 -52
- package/dist/server/src/__tests__/helpers/fixture-loader.js.map +1 -1
- package/dist/server/src/__tests__/helpers/migration-verification.d.ts +1 -1
- package/dist/server/src/__tests__/helpers/migration-verification.js.map +1 -1
- package/dist/server/src/__tests__/helpers/seed-helpers.business.test.js +4 -4
- package/dist/server/src/__tests__/helpers/seed-helpers.business.test.js.map +1 -1
- package/dist/server/src/__tests__/helpers/seed-helpers.d.ts +9 -9
- package/dist/server/src/__tests__/helpers/seed-helpers.js +57 -54
- package/dist/server/src/__tests__/helpers/seed-helpers.js.map +1 -1
- package/dist/server/src/__tests__/seed-admin-context.integration.test.js +2 -1
- package/dist/server/src/__tests__/seed-admin-context.integration.test.js.map +1 -1
- package/dist/server/src/demo-fixtures/__tests__/deterministic-uuid.test.js +3 -2
- package/dist/server/src/demo-fixtures/__tests__/deterministic-uuid.test.js.map +1 -1
- package/dist/server/src/demo-fixtures/__tests__/seed-and-validate.test.d.ts +1 -0
- package/dist/server/src/demo-fixtures/__tests__/seed-and-validate.test.js +69 -0
- package/dist/server/src/demo-fixtures/__tests__/seed-and-validate.test.js.map +1 -0
- package/dist/server/src/demo-fixtures/__tests__/use-case-registry.test.d.ts +1 -0
- package/dist/server/src/demo-fixtures/__tests__/use-case-registry.test.js +26 -0
- package/dist/server/src/demo-fixtures/__tests__/use-case-registry.test.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/admin-context.d.ts +10 -0
- package/dist/server/src/demo-fixtures/helpers/admin-context.js +40 -0
- package/dist/server/src/demo-fixtures/helpers/admin-context.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/placeholder.d.ts +45 -0
- package/dist/server/src/demo-fixtures/helpers/placeholder.js +50 -0
- package/dist/server/src/demo-fixtures/helpers/placeholder.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/seed-exchange-rates.d.ts +21 -0
- package/dist/server/src/demo-fixtures/helpers/seed-exchange-rates.js +26 -0
- package/dist/server/src/demo-fixtures/helpers/seed-exchange-rates.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/seed-vat.d.ts +20 -0
- package/dist/server/src/demo-fixtures/helpers/seed-vat.js +30 -0
- package/dist/server/src/demo-fixtures/helpers/seed-vat.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/equity/shareholder-dividend.d.ts +9 -0
- package/dist/server/src/demo-fixtures/use-cases/equity/shareholder-dividend.js +86 -0
- package/dist/server/src/demo-fixtures/use-cases/equity/shareholder-dividend.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.d.ts +12 -0
- package/dist/server/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.js +375 -0
- package/dist/server/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/income/client-payment-with-refund.d.ts +10 -0
- package/dist/server/src/demo-fixtures/use-cases/income/client-payment-with-refund.js +113 -0
- package/dist/server/src/demo-fixtures/use-cases/income/client-payment-with-refund.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/index.d.ts +41 -0
- package/dist/server/src/demo-fixtures/use-cases/index.js +50 -0
- package/dist/server/src/demo-fixtures/use-cases/index.js.map +1 -0
- package/dist/server/src/demo-fixtures/validate-demo-data.d.ts +1 -0
- package/dist/server/src/demo-fixtures/validate-demo-data.js +117 -0
- package/dist/server/src/demo-fixtures/validate-demo-data.js.map +1 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.d.ts +349 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.js +602 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.js.map +1 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.test.d.ts +1 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.test.js +247 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.test.js.map +1 -0
- package/dist/server/src/demo-fixtures/validators/types.d.ts +69 -0
- package/dist/server/src/demo-fixtures/validators/types.js +8 -0
- package/dist/server/src/demo-fixtures/validators/types.js.map +1 -0
- package/dist/server/src/fixtures/fixture-spec.d.ts +146 -0
- package/dist/server/src/fixtures/fixture-spec.js +2 -0
- package/dist/server/src/fixtures/fixture-spec.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js +4 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js.map +1 -1
- package/dist/server/src/modules/deel/resolvers/deel.resolvers.js +0 -3
- package/dist/server/src/modules/deel/resolvers/deel.resolvers.js.map +1 -1
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-a.integration.test.js +4 -3
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-a.integration.test.js.map +1 -1
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-b.integration.test.js +5 -3
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-b.integration.test.js.map +1 -1
- package/dist/server/src/shared/constants.d.ts +1 -0
- package/dist/server/src/shared/constants.js +1 -0
- package/dist/server/src/shared/constants.js.map +1 -1
- package/dist/server/src/shared/helpers/misc.js +2 -2
- package/dist/server/src/shared/helpers/misc.js.map +1 -1
- package/docs/demo-staging-guide.md +611 -0
- package/package.json +6 -3
- package/scripts/seed-admin-context.ts +22 -33
- package/src/__tests__/db-bootstrap.test.ts +9 -2
- package/src/__tests__/factories/business.ts +1 -1
- package/src/__tests__/factories/financial-account.ts +1 -1
- package/src/__tests__/factories/index.test.ts +1 -0
- package/src/__tests__/factories/tax-category.test.ts +8 -6
- package/src/__tests__/factories/tax-category.ts +2 -2
- package/src/__tests__/helpers/fixture-loader.ts +26 -61
- package/src/__tests__/helpers/migration-verification.ts +2 -2
- package/src/__tests__/helpers/seed-helpers.business.test.ts +4 -4
- package/src/__tests__/helpers/seed-helpers.ts +66 -75
- package/src/__tests__/seed-admin-context.integration.test.ts +2 -1
- package/src/demo-fixtures/__tests__/deterministic-uuid.test.ts +3 -2
- package/src/demo-fixtures/__tests__/seed-and-validate.test.ts +96 -0
- package/src/demo-fixtures/__tests__/use-case-registry.test.ts +27 -0
- package/src/demo-fixtures/helpers/admin-context.ts +59 -0
- package/src/demo-fixtures/helpers/placeholder.ts +50 -0
- package/src/demo-fixtures/helpers/seed-exchange-rates.ts +29 -0
- package/src/demo-fixtures/helpers/seed-vat.ts +35 -0
- package/src/demo-fixtures/use-cases/equity/shareholder-dividend.ts +88 -0
- package/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.ts +377 -0
- package/src/demo-fixtures/use-cases/income/client-payment-with-refund.ts +115 -0
- package/src/demo-fixtures/use-cases/index.ts +52 -0
- package/src/demo-fixtures/validate-demo-data.ts +153 -0
- package/src/demo-fixtures/validators/README.md +190 -0
- package/src/demo-fixtures/validators/ledger-validators.test.ts +298 -0
- package/src/demo-fixtures/validators/ledger-validators.ts +711 -0
- package/src/demo-fixtures/validators/types.ts +83 -0
- package/src/fixtures/fixture-spec.ts +158 -0
- package/src/modules/charges-matcher/__tests__/single-match-integration.test.ts +6 -0
- package/src/modules/deel/resolvers/deel.resolvers.ts +0 -3
- package/src/modules/ledger/__tests__/ledger-scenario-a.integration.test.ts +4 -3
- package/src/modules/ledger/__tests__/ledger-scenario-b.integration.test.ts +6 -3
- package/src/shared/constants.ts +2 -0
- package/src/shared/helpers/misc.ts +2 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @accounter/server
|
|
2
2
|
|
|
3
|
-
## 0.0.9-alpha-
|
|
3
|
+
## 0.0.9-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
@@ -204,6 +204,28 @@
|
|
|
204
204
|
utilize the `businessId` when constructing links to business detail pages, resolving the issue
|
|
205
205
|
of incorrect navigation.
|
|
206
206
|
|
|
207
|
+
- [#2874](https://github.com/Urigo/accounter-fullstack/pull/2874)
|
|
208
|
+
[`d6b165f`](https://github.com/Urigo/accounter-fullstack/commit/d6b165f05f3f6a79780bc045716f8c280689cbb5)
|
|
209
|
+
Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New Demo Staging Dataset System**:
|
|
210
|
+
Introduced a comprehensive system for seeding rich, deterministic financial data for staging and
|
|
211
|
+
development environments, based on predefined use-cases.
|
|
212
|
+
- **Comprehensive Ledger Validation**: Implemented a robust validation layer
|
|
213
|
+
(`packages/server/src/demo-fixtures/validators/`) that performs per-record, aggregate, and
|
|
214
|
+
entity-level balance checks, along with data integrity, foreign currency, and date validations.
|
|
215
|
+
- **Use-Case Driven Data Seeding**: The system now uses a registry of self-contained financial
|
|
216
|
+
scenarios (`packages/server/src/demo-fixtures/use-cases/`) that can be seeded with a single
|
|
217
|
+
command, ensuring stable entity IDs across deployments using deterministic UUIDs.
|
|
218
|
+
- **New NPM Scripts and Test Suite**: Added new `package.json` scripts (`seed:staging-demo`,
|
|
219
|
+
`validate:demo`, `test:demo-seed`) and a dedicated Vitest project (`demo-seed`) for end-to-end
|
|
220
|
+
testing of the seeding and validation pipeline.
|
|
221
|
+
- **Refactored Seed Helpers**: Centralized and improved helpers for idempotent creation of
|
|
222
|
+
financial entities, businesses, and tax categories, along with new helpers for seeding exchange
|
|
223
|
+
rates and VAT defaults.
|
|
224
|
+
- **Extensive Documentation**: New documentation files (`docs/demo-staging-dataset-spec.md`,
|
|
225
|
+
`docs/demo-staging-dataset-prompt-plan.md`, `docs/demo-staging-dataset-todo.md`,
|
|
226
|
+
`packages/server/docs/demo-staging-guide.md`) provide detailed specifications, implementation
|
|
227
|
+
plans, and developer guides.
|
|
228
|
+
|
|
207
229
|
- [#2831](https://github.com/Urigo/accounter-fullstack/pull/2831)
|
|
208
230
|
[`6136464`](https://github.com/Urigo/accounter-fullstack/commit/61364643eafac0c15ea5f444d3ecc9c33e854811)
|
|
209
231
|
Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New GraphQL Scalar for Country Codes**:
|
|
@@ -535,10 +557,10 @@
|
|
|
535
557
|
[`ca5e62b`](https://github.com/Urigo/accounter-fullstack/commit/ca5e62b91faaf33c99ac178575304797150efe1a),
|
|
536
558
|
[`73b11ba`](https://github.com/Urigo/accounter-fullstack/commit/73b11ba1fd676a21b4ba44fe99e2bfd181e513dc),
|
|
537
559
|
[`c7d6f21`](https://github.com/Urigo/accounter-fullstack/commit/c7d6f21ed62658159b1323334501daca03c8d3e5)]:
|
|
538
|
-
- @accounter/green-invoice-graphql@0.8.3-alpha-
|
|
539
|
-
- @accounter/pcn874-generator@0.6.4-alpha-
|
|
540
|
-
- @accounter/shaam-uniform-format-generator@0.2.3-alpha-
|
|
541
|
-
- @accounter/shaam6111-generator@0.1.5-alpha-
|
|
560
|
+
- @accounter/green-invoice-graphql@0.8.3-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
|
|
561
|
+
- @accounter/pcn874-generator@0.6.4-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
|
|
562
|
+
- @accounter/shaam-uniform-format-generator@0.2.3-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
|
|
563
|
+
- @accounter/shaam6111-generator@0.1.5-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
|
|
542
564
|
|
|
543
565
|
## 0.0.8
|
|
544
566
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Test Suites
|
|
4
4
|
|
|
5
|
-
The test suite is split into
|
|
5
|
+
The test suite is split into three Vitest projects for efficiency and isolation:
|
|
6
6
|
|
|
7
7
|
### 1. Unit Tests (`yarn test`)
|
|
8
8
|
|
|
@@ -21,6 +21,23 @@ DB-backed tests including:
|
|
|
21
21
|
- PostgreSQL running
|
|
22
22
|
- Migrations applied (see below)
|
|
23
23
|
|
|
24
|
+
### 3. Demo Seed E2E (`yarn test:demo-seed`)
|
|
25
|
+
|
|
26
|
+
Full seed-and-validate pipeline test that:
|
|
27
|
+
|
|
28
|
+
- Seeds complete demo dataset
|
|
29
|
+
- Validates data integrity and ledger balance
|
|
30
|
+
- Takes 10-30 seconds to complete
|
|
31
|
+
|
|
32
|
+
**Prerequisites:**
|
|
33
|
+
|
|
34
|
+
- PostgreSQL running
|
|
35
|
+
- Migrations applied
|
|
36
|
+
- `ALLOW_DEMO_SEED=1` environment variable
|
|
37
|
+
|
|
38
|
+
**Graceful Failure**: If migrations are stale, the test fails with a clear error message directing
|
|
39
|
+
you to run migrations, rather than hanging or producing cryptic errors.
|
|
40
|
+
|
|
24
41
|
### Running Tests
|
|
25
42
|
|
|
26
43
|
```bash
|
|
@@ -30,8 +47,8 @@ yarn test
|
|
|
30
47
|
# Unit + integration tests (for PRs)
|
|
31
48
|
yarn test:integration
|
|
32
49
|
|
|
33
|
-
#
|
|
34
|
-
yarn test:
|
|
50
|
+
# Demo seed E2E only
|
|
51
|
+
ALLOW_DEMO_SEED=1 yarn test:demo-seed
|
|
35
52
|
```
|
|
36
53
|
|
|
37
54
|
## Test DB Harness
|
|
@@ -87,6 +104,52 @@ The global Vitest setup may set `TEST_ENV_FILE` automatically to a temporary pat
|
|
|
87
104
|
needed. If the write fails, tests continue (non-fatal). To disable writing entirely you can point
|
|
88
105
|
`TEST_ENV_FILE` to a throwaway location.
|
|
89
106
|
|
|
107
|
+
## Demo Staging Dataset
|
|
108
|
+
|
|
109
|
+
The demo staging dataset system provides **use-case-driven financial scenarios** for staging
|
|
110
|
+
environments. Each use-case represents a complete financial scenario (expense, income, equity, etc.)
|
|
111
|
+
that can be seeded with deterministic UUIDs for stable demo data across deployments.
|
|
112
|
+
|
|
113
|
+
### Quick Start
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Seed demo data (staging/local only - requires explicit flag)
|
|
117
|
+
ALLOW_DEMO_SEED=1 yarn seed:staging-demo
|
|
118
|
+
|
|
119
|
+
# Validate seeded data integrity
|
|
120
|
+
yarn validate:demo
|
|
121
|
+
|
|
122
|
+
# Combined workflow (recommended)
|
|
123
|
+
ALLOW_DEMO_SEED=1 yarn seed:staging-demo && yarn validate:demo
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Key Features
|
|
127
|
+
|
|
128
|
+
- **Deterministic UUIDs**: Stable entity IDs via UUID v5 generation
|
|
129
|
+
- **Modular Registry**: Self-contained use-case fixtures with metadata
|
|
130
|
+
- **Production Safeguards**: Hard refusal to run in production environments
|
|
131
|
+
- **Comprehensive Validation**: Ledger balance checks, entity reconciliation
|
|
132
|
+
|
|
133
|
+
### Documentation
|
|
134
|
+
|
|
135
|
+
- **Specification**: `docs/demo-staging-dataset-spec.md` – Complete technical specification
|
|
136
|
+
- **Developer Guide**: `packages/server/docs/demo-staging-guide.md` – Quick start, adding use-cases,
|
|
137
|
+
troubleshooting
|
|
138
|
+
- **Implementation Plan**: `docs/demo-staging-dataset-prompt-plan.md` – Step-by-step prompts
|
|
139
|
+
- **Progress Tracking**: `docs/demo-staging-dataset-todo.md` – Implementation checklist
|
|
140
|
+
|
|
141
|
+
### Architecture
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
Use-Case Registry → Seed Orchestrator → Validation Layer
|
|
145
|
+
(TypeScript modules) (seed-demo-data) (validate-demo)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
See the [Developer Guide](./docs/demo-staging-guide.md) for detailed instructions on adding new
|
|
149
|
+
use-cases and troubleshooting.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
90
153
|
## Demo Test Data & Ledger Docs
|
|
91
154
|
|
|
92
155
|
High-level architecture, roadmap and prompts are maintained in root `docs/`:
|
|
@@ -30,29 +30,20 @@ export async function seedAdminCore(client) {
|
|
|
30
30
|
// 1. Create admin business entity
|
|
31
31
|
console.log('Creating admin business entity...');
|
|
32
32
|
// First check if admin entity already exists (by name and type, ignoring owner_id for admin)
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
adminEntityId = id;
|
|
48
|
-
console.log(`✅ Admin entity: ${adminEntityId}`);
|
|
49
|
-
// Create corresponding business record
|
|
50
|
-
await ensureBusinessForEntity(client, adminEntityId);
|
|
51
|
-
console.log('✅ Admin business record created');
|
|
52
|
-
// Update owner_id to self
|
|
53
|
-
await client.query(`UPDATE accounter_schema.financial_entities SET owner_id = $1 WHERE id = $1`, [adminEntityId]);
|
|
54
|
-
console.log('✅ Admin entity owner_id set to self');
|
|
55
|
-
}
|
|
33
|
+
const { id } = await ensureFinancialEntity(client, {
|
|
34
|
+
name: 'Admin Business',
|
|
35
|
+
type: 'business',
|
|
36
|
+
});
|
|
37
|
+
const adminEntityId = id;
|
|
38
|
+
console.log(`✅ Admin entity: ${adminEntityId}`);
|
|
39
|
+
// Create corresponding business record
|
|
40
|
+
await ensureBusinessForEntity(client, adminEntityId);
|
|
41
|
+
console.log('✅ Admin business record created');
|
|
42
|
+
// Update owner_id to self
|
|
43
|
+
await client.query(`UPDATE accounter_schema.financial_entities SET owner_id = $1 WHERE id = $1`, [
|
|
44
|
+
adminEntityId,
|
|
45
|
+
]);
|
|
46
|
+
console.log('✅ Admin entity owner_id set to self');
|
|
56
47
|
// 2. Create authority businesses
|
|
57
48
|
const authorities = {
|
|
58
49
|
businesses: ['VAT', 'Tax', 'Social Security'],
|
|
@@ -64,9 +55,10 @@ export async function seedAdminCore(client) {
|
|
|
64
55
|
const { id } = await ensureFinancialEntity(client, {
|
|
65
56
|
name,
|
|
66
57
|
type: 'business',
|
|
58
|
+
ownerId: adminEntityId,
|
|
67
59
|
});
|
|
68
60
|
authorityBusinessIds[name] = id;
|
|
69
|
-
await ensureBusinessForEntity(client, id, {
|
|
61
|
+
await ensureBusinessForEntity(client, id, { isDocumentsOptional: true });
|
|
70
62
|
}
|
|
71
63
|
console.log(`✅ Created ${authorities.businesses.length} authority businesses`);
|
|
72
64
|
// 3. Create authority tax categories
|
|
@@ -76,6 +68,7 @@ export async function seedAdminCore(client) {
|
|
|
76
68
|
const { id } = await ensureFinancialEntity(client, {
|
|
77
69
|
name,
|
|
78
70
|
type: 'tax_category',
|
|
71
|
+
ownerId: adminEntityId,
|
|
79
72
|
});
|
|
80
73
|
authorityTaxCategoryIds[name] = id;
|
|
81
74
|
await ensureTaxCategoryForEntity(client, id);
|
|
@@ -102,6 +95,7 @@ export async function seedAdminCore(client) {
|
|
|
102
95
|
const { id } = await ensureFinancialEntity(client, {
|
|
103
96
|
name,
|
|
104
97
|
type: 'tax_category',
|
|
98
|
+
ownerId: adminEntityId,
|
|
105
99
|
});
|
|
106
100
|
generalTaxCategoryIds[name] = id;
|
|
107
101
|
await ensureTaxCategoryForEntity(client, id);
|
|
@@ -120,6 +114,7 @@ export async function seedAdminCore(client) {
|
|
|
120
114
|
const { id } = await ensureFinancialEntity(client, {
|
|
121
115
|
name,
|
|
122
116
|
type: 'tax_category',
|
|
117
|
+
ownerId: adminEntityId,
|
|
123
118
|
});
|
|
124
119
|
crossYearTaxCategoryIds[name] = id;
|
|
125
120
|
await ensureTaxCategoryForEntity(client, id);
|
|
@@ -162,7 +157,7 @@ export async function seedAdminCore(client) {
|
|
|
162
157
|
.map((_, i) => `$${i + 1}`)
|
|
163
158
|
.join(', ');
|
|
164
159
|
const values = Object.values(context);
|
|
165
|
-
await client.query(`INSERT INTO accounter_schema.user_context (${columns}) VALUES (${placeholders})`, values);
|
|
160
|
+
await client.query(`INSERT INTO accounter_schema.user_context (${columns}) VALUES (${placeholders}) ON CONFLICT (owner_id) DO NOTHING`, values);
|
|
166
161
|
console.log('✅ user_context created');
|
|
167
162
|
}
|
|
168
163
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-admin-context.js","sourceRoot":"","sources":["../../../scripts/seed-admin-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,0CAA0C,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAkB;IACpD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,2EAA2E;IAC3E,mFAAmF;IACnF,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAChB;;qCAE+B,EAC/B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CACV,mFAAmF,EACnF,CAAC,CACF,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,6FAA6F;IAC7F,MAAM,
|
|
1
|
+
{"version":3,"file":"seed-admin-context.js","sourceRoot":"","sources":["../../../scripts/seed-admin-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { TestDatabase, isPoolHealthy } from './helpers/db-setup.js';
|
|
|
3
3
|
import { assertLatestMigrationApplied } from './helpers/migration-verification.js';
|
|
4
4
|
import { seedAdminCore } from '../../scripts/seed-admin-context.js';
|
|
5
5
|
import { qualifyTable } from './helpers/test-db-config.js';
|
|
6
|
+
import { buildAdminContextFromDb } from './helpers/admin-context-builder.js';
|
|
6
7
|
/**
|
|
7
8
|
* Smoke test for DB test harness
|
|
8
9
|
* Verifies the full bootstrap pipeline: connect → seed → query
|
|
@@ -49,13 +50,17 @@ describe('DB Test Harness Bootstrap', () => {
|
|
|
49
50
|
}));
|
|
50
51
|
it('has expected tax categories', async () => db.withTransaction(async (client) => {
|
|
51
52
|
await seedAdminCore(client);
|
|
52
|
-
const
|
|
53
|
+
const adminContext = await buildAdminContextFromDb(client);
|
|
54
|
+
const result = await client.query(`SELECT COUNT(tc.*) FROM ${qualifyTable('tax_categories')} tc
|
|
55
|
+
LEFT JOIN ${qualifyTable('financial_entities')} fe USING (id)
|
|
56
|
+
WHERE owner_id = $1`, [adminContext.defaultAdminBusinessId]);
|
|
53
57
|
const count = parseInt(result.rows[0].count, 10);
|
|
54
58
|
expect(count).toBe(EXPECTED_TAX_CATEGORIES);
|
|
55
59
|
}));
|
|
56
60
|
it('has user_context after seeding', async () => db.withTransaction(async (client) => {
|
|
57
61
|
await seedAdminCore(client);
|
|
58
|
-
const
|
|
62
|
+
const adminContext = await buildAdminContextFromDb(client);
|
|
63
|
+
const result = await client.query(`SELECT owner_id, vat_business_id FROM ${qualifyTable('user_context')} WHERE owner_id = $1 LIMIT 1`, [adminContext.defaultAdminBusinessId]);
|
|
59
64
|
expect(result.rows).toHaveLength(1);
|
|
60
65
|
expect(result.rows[0].owner_id).toBeDefined();
|
|
61
66
|
expect(result.rows[0].vat_business_id).toBeDefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-bootstrap.test.js","sourceRoot":"","sources":["../../../../src/__tests__/db-bootstrap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"db-bootstrap.test.js","sourceRoot":"","sources":["../../../../src/__tests__/db-bootstrap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ describe('Factory Integration', () => {
|
|
|
30
30
|
const taxCategoryId = makeUUID('tax-category', 'tax-expense');
|
|
31
31
|
const taxCategory = createTaxCategory({
|
|
32
32
|
id: taxCategoryId,
|
|
33
|
+
name: 'Expense Tax',
|
|
33
34
|
});
|
|
34
35
|
const accountId = makeUUID('financial-account', 'bank-account');
|
|
35
36
|
const account = createFinancialAccount({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/index.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,oCAAoC;QACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,iBAAiB,CAAC;YACpC,EAAE,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export function createTaxCategory(overrides) {
|
|
|
37
37
|
id: defaultId,
|
|
38
38
|
// Intelligent name defaulting: use provided id, or use generated UUID
|
|
39
39
|
// This ensures display name is always meaningful even when only id is specified
|
|
40
|
-
name: overrides?.id ?? defaultId,
|
|
40
|
+
name: overrides?.name ?? overrides?.id ?? defaultId,
|
|
41
41
|
hashavshevetName: null,
|
|
42
42
|
taxExcluded: false,
|
|
43
43
|
...overrides,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tax-category.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/tax-category.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAGnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAkE;IAElE,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,OAAO;QACL,EAAE,EAAE,SAAS;QACb,sEAAsE;QACtE,gFAAgF;QAChF,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"tax-category.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/tax-category.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAGnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAkE;IAElE,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,OAAO;QACL,EAAE,EAAE,SAAS;QACb,sEAAsE;QACtE,gFAAgF;QAChF,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,SAAS,EAAE,EAAE,IAAI,SAAS;QACnD,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,KAAK;QAClB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { createTaxCategory } from './tax-category.js';
|
|
|
5
5
|
describe('Factory: Tax Category', () => {
|
|
6
6
|
describe('createTaxCategory', () => {
|
|
7
7
|
it('should create tax category with default values', () => {
|
|
8
|
-
const category = createTaxCategory();
|
|
8
|
+
const category = createTaxCategory({ name: 'Default Category' });
|
|
9
9
|
// Required field with default
|
|
10
10
|
expect(category.id).toBeDefined();
|
|
11
11
|
expect(category.id).toMatch(UUID_REGEX);
|
|
@@ -15,8 +15,8 @@ describe('Factory: Tax Category', () => {
|
|
|
15
15
|
expect(category.hashavshevetName).toBeNull();
|
|
16
16
|
});
|
|
17
17
|
it('should generate unique IDs by default', () => {
|
|
18
|
-
const category1 = createTaxCategory();
|
|
19
|
-
const category2 = createTaxCategory();
|
|
18
|
+
const category1 = createTaxCategory({ name: 'Category 1' });
|
|
19
|
+
const category2 = createTaxCategory({ name: 'Category 2' });
|
|
20
20
|
expect(category1.id).not.toBe(category2.id);
|
|
21
21
|
});
|
|
22
22
|
it('should apply overrides correctly', () => {
|
|
@@ -39,7 +39,7 @@ describe('Factory: Tax Category', () => {
|
|
|
39
39
|
expect(category.taxExcluded).toBe(false);
|
|
40
40
|
});
|
|
41
41
|
it('should preserve all required fields', () => {
|
|
42
|
-
const category = createTaxCategory();
|
|
42
|
+
const category = createTaxCategory({ name: 'Default Category' });
|
|
43
43
|
// Verify structure matches expected pgtyped interface
|
|
44
44
|
expect(category).toHaveProperty('id');
|
|
45
45
|
expect(category).toHaveProperty('hashavshevetName');
|
|
@@ -48,6 +48,7 @@ describe('Factory: Tax Category', () => {
|
|
|
48
48
|
it('should handle tax-excluded categories', () => {
|
|
49
49
|
const category = createTaxCategory({
|
|
50
50
|
taxExcluded: true,
|
|
51
|
+
name: 'Tax Exempt',
|
|
51
52
|
});
|
|
52
53
|
expect(category.taxExcluded).toBe(true);
|
|
53
54
|
expect(category.hashavshevetName).toBeNull();
|
|
@@ -61,12 +62,13 @@ describe('Factory: Tax Category', () => {
|
|
|
61
62
|
it('should allow explicit null overrides', () => {
|
|
62
63
|
const category = createTaxCategory({
|
|
63
64
|
hashavshevetName: null,
|
|
65
|
+
name: 'No Integration',
|
|
64
66
|
});
|
|
65
67
|
expect(category.hashavshevetName).toBeNull();
|
|
66
68
|
});
|
|
67
69
|
it('should create deterministic categories with seed', () => {
|
|
68
|
-
const category1 = createTaxCategory({ id: makeUUID('tax-category', 'default-category') });
|
|
69
|
-
const category2 = createTaxCategory({ id: makeUUID('tax-category', 'default-category') });
|
|
70
|
+
const category1 = createTaxCategory({ id: makeUUID('tax-category', 'default-category'), name: 'Default Category' });
|
|
71
|
+
const category2 = createTaxCategory({ id: makeUUID('tax-category', 'default-category'), name: 'Default Category' });
|
|
70
72
|
expect(category1.id).toBe(category2.id);
|
|
71
73
|
});
|
|
72
74
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tax-category.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/tax-category.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tax-category.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/factories/tax-category.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,4 +97,4 @@ export type FixtureIdMapping = Map<string, string>;
|
|
|
97
97
|
* );
|
|
98
98
|
* ```
|
|
99
99
|
*/
|
|
100
|
-
export declare function insertFixture(client: PoolClient | Client, fixture: Fixture): Promise<FixtureIdMapping>;
|
|
100
|
+
export declare function insertFixture(client: PoolClient | Client, fixture: Fixture, adminBusinessId?: string): Promise<FixtureIdMapping>;
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
import { assertValidFixture } from './fixture-validation.js';
|
|
11
11
|
import { qualifyTable } from './test-db-config.js';
|
|
12
12
|
import { makeUUID, makeUUIDLegacy } from '../../demo-fixtures/helpers/deterministic-uuid.js';
|
|
13
|
+
import { UUID_REGEX } from '../../shared/constants.js';
|
|
14
|
+
import { ensureBusinessForEntity, ensureFinancialEntity, ensureTaxCategoryForEntity } from './seed-helpers.js';
|
|
13
15
|
/**
|
|
14
16
|
* Custom error for fixture insertion failures
|
|
15
17
|
*
|
|
@@ -100,7 +102,7 @@ export class FixtureInsertionError extends Error {
|
|
|
100
102
|
* );
|
|
101
103
|
* ```
|
|
102
104
|
*/
|
|
103
|
-
export async function insertFixture(client, fixture) {
|
|
105
|
+
export async function insertFixture(client, fixture, adminBusinessId) {
|
|
104
106
|
// Validate fixture before insertion
|
|
105
107
|
assertValidFixture(fixture);
|
|
106
108
|
const idMapping = new Map();
|
|
@@ -125,42 +127,16 @@ export async function insertFixture(client, fixture) {
|
|
|
125
127
|
for (const business of fixture.businesses.businesses) {
|
|
126
128
|
// Insert financial entity first (type='business')
|
|
127
129
|
// Field mapping: business.name used for display (required); hebrewName is legacy/optional
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
const { id: entityId } = await ensureFinancialEntity(client, {
|
|
131
|
+
id: business.id,
|
|
132
|
+
name: business.name || business.id,
|
|
133
|
+
type: 'business',
|
|
134
|
+
ownerId: adminBusinessId,
|
|
135
|
+
});
|
|
136
|
+
const { id: businessId, ...options } = business;
|
|
132
137
|
// Insert business details - note: vat_number column maps to governmentId field
|
|
133
|
-
await client
|
|
134
|
-
|
|
135
|
-
exempt_dealer, suggestion_data, optional_vat, country,
|
|
136
|
-
pcn874_record_type_override, can_settle_with_receipt, no_invoices_required
|
|
137
|
-
)
|
|
138
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
|
|
139
|
-
ON CONFLICT (id) DO NOTHING`, [
|
|
140
|
-
business.id,
|
|
141
|
-
business.hebrewName,
|
|
142
|
-
business.address,
|
|
143
|
-
business.city,
|
|
144
|
-
business.zipCode,
|
|
145
|
-
business.email,
|
|
146
|
-
business.website,
|
|
147
|
-
business.phoneNumber,
|
|
148
|
-
business.governmentId, // Maps to vat_number column
|
|
149
|
-
business.exemptDealer ?? false,
|
|
150
|
-
business.suggestions ?? null,
|
|
151
|
-
business.optionalVat ?? false,
|
|
152
|
-
business.country ?? 'ISR',
|
|
153
|
-
business.pcn874RecordTypeOverride ?? null,
|
|
154
|
-
business.isReceiptEnough ?? false,
|
|
155
|
-
business.isDocumentsOptional ?? false,
|
|
156
|
-
]);
|
|
157
|
-
if (entityResult.rows.length > 0) {
|
|
158
|
-
idMapping.set(business.id, entityResult.rows[0].id);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
// Entity already existed, map to itself
|
|
162
|
-
idMapping.set(business.id, business.id);
|
|
163
|
-
}
|
|
138
|
+
await ensureBusinessForEntity(client, entityId, options);
|
|
139
|
+
idMapping.set(business.id, entityId);
|
|
164
140
|
}
|
|
165
141
|
});
|
|
166
142
|
}
|
|
@@ -169,22 +145,19 @@ export async function insertFixture(client, fixture) {
|
|
|
169
145
|
await executeSavepointSection('tax_categories', async () => {
|
|
170
146
|
for (const taxCategory of fixture.taxCategories.taxCategories) {
|
|
171
147
|
// Insert financial entity first
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
148
|
+
const { id: entityId } = await ensureFinancialEntity(client, {
|
|
149
|
+
id: taxCategory.id,
|
|
150
|
+
name: taxCategory.name || taxCategory.id,
|
|
151
|
+
type: 'tax_category',
|
|
152
|
+
ownerId: adminBusinessId,
|
|
153
|
+
});
|
|
176
154
|
// Insert tax category details
|
|
177
|
-
await client
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
idMapping.set(taxCategory.id, entityResult.rows[0].id);
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
idMapping.set(taxCategory.id, taxCategory.id);
|
|
187
|
-
}
|
|
155
|
+
await ensureTaxCategoryForEntity(client, entityId, {
|
|
156
|
+
name: taxCategory.name,
|
|
157
|
+
hashavshevetName: taxCategory.hashavshevetName,
|
|
158
|
+
taxExcluded: taxCategory.taxExcluded,
|
|
159
|
+
});
|
|
160
|
+
idMapping.set(taxCategory.id, entityId);
|
|
188
161
|
}
|
|
189
162
|
});
|
|
190
163
|
}
|
|
@@ -266,7 +239,7 @@ export async function insertFixture(client, fixture) {
|
|
|
266
239
|
for (const transaction of fixture.transactions.transactions) {
|
|
267
240
|
// If account_id looks like an account_number (not a UUID), look up the actual UUID
|
|
268
241
|
let accountId = transaction.account_id;
|
|
269
|
-
if (accountId && !accountId.match(
|
|
242
|
+
if (accountId && !accountId.match(UUID_REGEX)) {
|
|
270
243
|
// account_id is actually an account_number, look up the UUID
|
|
271
244
|
const accountResult = await client.query(`SELECT id FROM ${qualifyTable('financial_accounts')} WHERE account_number = $1`, [accountId]);
|
|
272
245
|
if (accountResult.rows.length === 0) {
|