@substrat-run/engine-invoicing 0.2.0 → 0.3.0

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/README.md CHANGED
@@ -9,49 +9,37 @@ with frozen prices and provenance, ready to hand to whatever actually issues inv
9
9
  (typically an accounting connector). It is **not** a ledger, not accounts receivable,
10
10
  not payment tracking.
11
11
 
12
- **Full documentation: https://substrat.ahlstrand.es/engines/invoicing**
12
+ ## What it owns
13
13
 
14
- ## Snapshot, not join
14
+ - **Exported means immutable** — nothing appends, nothing edits, exporting twice throws.
15
+ - **One document, one currency** — a mixed-currency delivery is rejected at write time.
16
+ - **Snapshot, not join** — prices are frozen from the event payload, with provenance kept.
17
+ - **Idempotent on replay** — the source order is the dedup key, so a redelivery never
18
+ bills twice.
15
19
 
16
- The engine consumes `workorder.completed` with **zero imports** from the work-order
17
- engine — star topology. The consumer parses its own Zod view of the event payload,
18
- finds or creates the open underlag for that customer, and copies the billable lines
19
- with provenance (`source_type`, `source_id`):
20
+ ## Install
20
21
 
21
- ```ts
22
- events: {
23
- consumes: [{ type: 'workorder.completed', schemaVersion: 1 }],
24
- }
22
+ ```sh
23
+ pnpm add @substrat-run/engine-invoicing
25
24
  ```
26
25
 
27
- Prices are frozen from the payload at the moment the work order completed. If the
28
- vertical's price list changes tomorrow, yesterday's underlag doesn't. Consumers are
29
- delivered at-least-once; find-or-create plus the kernel's delivery journal keep the
30
- handler idempotent.
31
-
32
- ## The immutability invariant
33
-
34
- An underlag is `open` or `exported`:
26
+ ```ts
27
+ import { invoicingModule } from '@substrat-run/engine-invoicing';
35
28
 
36
- - While **open**, consumed events append lines.
37
- - **`invoicing/export`** flips it to `exported` — from then on it is immutable.
38
- Nothing appends, nothing edits, exporting again throws.
39
- - Billable work arriving *after* export opens a **new** underlag. History is never
40
- rewritten; late facts become new facts.
29
+ host.registerModule(invoicingModule);
30
+ ```
41
31
 
42
- `invoicing.underlag-exported` is the natural hook for an accounting connector that
43
- turns the frozen basis into a real invoice.
32
+ That's the whole integration. Lines arrive by **event**, never by call: the engine consumes
33
+ `workorder.completed` and `commerce.order-placed` with **zero imports** from either producer,
34
+ parsing its own Zod view of each payload. To make a new domain billable, emit an event — you
35
+ never import this engine to do it.
44
36
 
45
- ## Operations
37
+ ## Documentation
46
38
 
47
- | Operation | Permission | Does |
48
- |---|---|---|
49
- | `invoicing/list` | `invoicing:read` | list underlag, each with computed total |
50
- | `invoicing/get` | `invoicing:read` | one underlag with all lines and total |
51
- | `invoicing/export` | `invoicing:export` | flip to `exported` — the point of no return |
39
+ **https://substrat.ahlstrand.es/engines/invoicing/** the domain model and invariants, the
40
+ operation/permission surface, event contracts and versioning, and how to compose or extend it.
52
41
 
53
- Totals use exact decimal arithmetic from
54
- [`@substrat-run/contracts`](https://npmjs.com/package/@substrat-run/contracts), never floats.
42
+ The docs site is the single source of truth; this README deliberately doesn't restate it.
55
43
 
56
44
  ## Related packages
57
45
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,sBAAsB,CAAC;AAS9B,eAAO,MAAM,cAAc;;;CAG1B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;GA6B/B,CAAC;AA6CF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAuMD,eAAO,MAAM,eAAe,EAAE,kBAY7B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,sBAAsB,CAAC;AAS9B,eAAO,MAAM,cAAc;;;CAG1B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;GA6B/B,CAAC;AA6CF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AA0QD,eAAO,MAAM,eAAe,EAAE,kBAY7B,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { addDecimal, entityRef, money, moduleManifest, permissionKey, } from '@substrat-run/contracts';
2
+ import { addMoney, entityRef, money, moduleManifest, moneyOf, permissionKey, } from '@substrat-run/contracts';
3
3
  import { assertAllowed, ulid, } from '@substrat-run/kernel';
4
4
  // ============================================================================
5
5
  // The invoicing engine (demos/fsm/spec/testrun.md §4.3/§5.3). Consumes
@@ -22,7 +22,19 @@ export const invoicingManifest = moduleManifest.parse({
22
22
  events: {
23
23
  emits: [
24
24
  { type: 'invoicing.underlag-updated', schemaVersion: 1 },
25
- { type: 'invoicing.underlag-exported', schemaVersion: 1 },
25
+ // v2: `total` is Money, not a bare amount string. v1 stated a number with
26
+ // no currency on a financial artifact — and `demos/fsm/spec/testrun.md`
27
+ // always specified `total: Money`, so this is the code meeting its own
28
+ // spec rather than a change of intent.
29
+ //
30
+ // NOT dual-emitted, despite D-28's deprecation-window rule: consumer
31
+ // dispatch keys on event TYPE only (`WHERE o.type = ?`; the schemaVersion
32
+ // in `consumes` is discarded at registration), so emitting v1 and v2 would
33
+ // deliver BOTH to every consumer of this type. For an export event that
34
+ // means a connector could invoice twice, silently. A clean replace instead
35
+ // fails loudly — a v1 consumer's strict parse rejects v2 and dead-letters,
36
+ // which is visible. See kernel-design open question on version routing.
37
+ { type: 'invoicing.underlag-exported', schemaVersion: 2 },
26
38
  ],
27
39
  consumes: [
28
40
  { type: 'workorder.completed', schemaVersion: 1 },
@@ -105,15 +117,62 @@ const commercePlacedPayload = z.object({
105
117
  })),
106
118
  total: money,
107
119
  });
120
+ /**
121
+ * The underlag's total, as Money.
122
+ *
123
+ * Uses `addMoney`, not `addDecimal`: an invoice basis that sums 100 SEK and
124
+ * 100 EUR into "200" is not a rounding bug, it is a financial artifact stating
125
+ * a number that means nothing. `addMoney` throws on a currency mismatch, so the
126
+ * engine refuses rather than invents. `assertSingleCurrency` in the consumers is
127
+ * the real guard — this is defence in depth behind it.
128
+ */
129
+ function underlagTotalMoney(ctx, underlagId) {
130
+ const rows = ctx.sql.query('SELECT line_total_amount, currency FROM invoicing_lines WHERE underlag_id = ?', [underlagId]);
131
+ // An underlag with no lines is unreachable in practice — find-or-create and
132
+ // the line inserts share one transaction — but a zero total must still have a
133
+ // currency to be Money at all. Attributing a currency to an empty document is
134
+ // exactly the guess this engine should not make; SEK is the demo default and
135
+ // the honest fix is a currency column on the underlag, which needs a migration
136
+ // and therefore a human checkpoint (see docs/design/commerce-gaps.md §3.1).
137
+ if (rows.length === 0)
138
+ return moneyOf('0', 'SEK');
139
+ return rows
140
+ .map((r) => moneyOf(r.line_total_amount, r.currency))
141
+ .reduce((sum, m) => addMoney(sum, m));
142
+ }
143
+ /** Back-compat shim: the operation surface has always returned a bare string. */
108
144
  function underlagTotal(ctx, underlagId) {
109
- return ctx.sql
110
- .query('SELECT line_total_amount FROM invoicing_lines WHERE underlag_id = ?', [underlagId])
111
- .reduce((sum, r) => addDecimal(sum, r.line_total_amount), '0');
145
+ return underlagTotalMoney(ctx, underlagId).amount;
146
+ }
147
+ /**
148
+ * A document has one currency. Reject at write time, so a mixed-currency
149
+ * delivery dead-letters and the underlag is never corrupted — rejecting at read
150
+ * time instead would leave a document that can never be listed or exported
151
+ * again.
152
+ */
153
+ function assertSingleCurrency(ctx, underlagId, incoming) {
154
+ const existing = ctx.sql.query('SELECT DISTINCT currency FROM invoicing_lines WHERE underlag_id = ?', [underlagId]);
155
+ const currencies = new Set([
156
+ ...existing.map((r) => r.currency),
157
+ ...incoming.map((l) => l.lineTotal.currency),
158
+ ...incoming.map((l) => l.unitPrice.currency),
159
+ ]);
160
+ if (currencies.size > 1) {
161
+ throw new Error(`currency mismatch on underlag ${underlagId}: ${[...currencies].sort().join(', ')} — an underlag is one document in one currency`);
162
+ }
112
163
  }
113
164
  const onWorkOrderCompleted = (ctx, event) => {
114
165
  const p = completedPayload.parse(event.payload);
115
166
  if (p.billable.length === 0)
116
167
  return;
168
+ // Idempotent on at-least-once redelivery (K-11): the order is the dedup key.
169
+ // Its lines are already present → this delivery is a replay, do nothing.
170
+ // This guard was missing while `onCommerceOrderPlaced` had it, so the two
171
+ // consumers of one engine disagreed about whether replay was possible — and
172
+ // the docs promised the guard for both.
173
+ const already = ctx.sql.query(`SELECT 1 AS found FROM invoicing_lines WHERE source_type = 'workorder' AND source_id = ? LIMIT 1`, [p.orderId])[0];
174
+ if (already)
175
+ return;
117
176
  // Find-or-create the OPEN underlag for this customer; an exported underlag
118
177
  // is immutable — late deliveries open a new one (engine invariant on top of
119
178
  // the kernel's delivery journal).
@@ -125,6 +184,7 @@ const onWorkOrderCompleted = (ctx, event) => {
125
184
  VALUES (?, ?, ?, ?, 'open', ?)`, [id, number, p.customer.entityType, p.customer.entityId, new Date().toISOString()]);
126
185
  underlag = ctx.sql.query('SELECT * FROM invoicing_underlag WHERE id = ?', [id])[0];
127
186
  }
187
+ assertSingleCurrency(ctx, underlag.id, p.billable);
128
188
  for (const line of p.billable) {
129
189
  ctx.sql.exec(`INSERT INTO invoicing_lines
130
190
  (id, underlag_id, source_type, source_id, article, description, qty, unit,
@@ -177,6 +237,7 @@ const onCommerceOrderPlaced = (ctx, event) => {
177
237
  VALUES (?, ?, ?, ?, 'open', ?)`, [id, number, p.customer.entityType, p.customer.entityId, new Date().toISOString()]);
178
238
  underlag = ctx.sql.query('SELECT * FROM invoicing_underlag WHERE id = ?', [id])[0];
179
239
  }
240
+ assertSingleCurrency(ctx, underlag.id, p.billable);
180
241
  for (const line of p.billable) {
181
242
  ctx.sql.exec(`INSERT INTO invoicing_lines
182
243
  (id, underlag_id, source_type, source_id, article, description, qty, unit,
@@ -237,13 +298,15 @@ const exportOp = async (ctx, input) => {
237
298
  ctx.sql.exec(`UPDATE invoicing_underlag SET status = 'exported', exported_at = ? WHERE id = ?`, [new Date().toISOString(), underlag.id]);
238
299
  ctx.emit({
239
300
  type: 'invoicing.underlag-exported',
240
- schemaVersion: 1,
301
+ schemaVersion: 2,
241
302
  entity: { entityType: 'underlag', entityId: underlag.id },
242
303
  piiClass: 'none',
243
304
  payload: {
244
305
  underlagId: underlag.id,
245
306
  number: underlag.number,
246
- total: underlagTotal(ctx, underlag.id),
307
+ // Money, not a bare string: the consumer of an export event is an
308
+ // accounting connector, and "1550" without a currency is not an amount.
309
+ total: underlagTotalMoney(ctx, underlag.id),
247
310
  },
248
311
  });
249
312
  return ctx.sql.query('SELECT * FROM invoicing_underlag WHERE id = ?', [
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/engine-invoicing",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Substrat engine: fakturaunderlag — consumes billable events, snapshots lines with provenance, immutable once exported",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -26,14 +26,17 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "zod": "^4.4.3",
29
- "@substrat-run/contracts": "^0.3.0",
30
- "@substrat-run/kernel": "^0.3.0"
29
+ "@substrat-run/contracts": "^0.4.0",
30
+ "@substrat-run/kernel": "^0.4.0"
31
31
  },
32
32
  "devDependencies": {
33
- "typescript": "^5.6.0"
33
+ "typescript": "^5.6.0",
34
+ "vitest": "^3.0.0",
35
+ "@substrat-run/engine-test-kit": "^0.0.2"
34
36
  },
35
37
  "scripts": {
36
38
  "build": "tsc -p tsconfig.json",
37
- "typecheck": "tsc -p tsconfig.json --noEmit"
39
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
40
+ "test": "vitest run"
38
41
  }
39
42
  }