@happyvertical/smrt-commerce 0.56.0 → 0.56.2

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 (213) hide show
  1. package/AGENTS.md +9 -8
  2. package/README.md +98 -4
  3. package/agents/accounting-snapshot-mapper.md +111 -0
  4. package/agents/contract-money.md +24 -0
  5. package/agents/cost-billing.md +7 -2
  6. package/agents/customer-vendor-ui.md +7 -1
  7. package/agents/document-money.md +127 -0
  8. package/agents/invoice-calculations.md +14 -2
  9. package/agents/line-amount-migration.md +50 -0
  10. package/agents/minor-unit-migration.md +20 -0
  11. package/agents/money-calculator.md +45 -0
  12. package/agents/money-model.md +113 -0
  13. package/agents/revenue-journal.md +23 -0
  14. package/agents/tax-codes.md +48 -0
  15. package/agents/tax-summary.md +128 -0
  16. package/dist/accounting-snapshot.d.ts +79 -0
  17. package/dist/accounting-snapshot.d.ts.map +1 -0
  18. package/dist/billing/runtime.d.ts +2 -0
  19. package/dist/billing/runtime.d.ts.map +1 -1
  20. package/dist/chunks/ContractLineItemCollection--BrGMtNz.js +265 -0
  21. package/dist/chunks/ContractLineItemCollection--BrGMtNz.js.map +1 -0
  22. package/dist/chunks/CustomerCollection-CjGaZSpf.js +99 -0
  23. package/dist/chunks/CustomerCollection-CjGaZSpf.js.map +1 -0
  24. package/dist/chunks/DocumentTaxCollection-KOkaQT2M.js +1659 -0
  25. package/dist/chunks/DocumentTaxCollection-KOkaQT2M.js.map +1 -0
  26. package/dist/chunks/InvoiceCollection-BUe_8FT1.js +1047 -0
  27. package/dist/chunks/InvoiceCollection-BUe_8FT1.js.map +1 -0
  28. package/dist/chunks/InvoiceLineItemCollection-CPQGghyd.js +468 -0
  29. package/dist/chunks/InvoiceLineItemCollection-CPQGghyd.js.map +1 -0
  30. package/dist/chunks/TaxCodeCollection-DF2eaJed.js +149 -0
  31. package/dist/chunks/TaxCodeCollection-DF2eaJed.js.map +1 -0
  32. package/dist/chunks/TaxComponentCollection-3x24xSNh.js +129 -0
  33. package/dist/chunks/TaxComponentCollection-3x24xSNh.js.map +1 -0
  34. package/dist/chunks/TaxSettingsCollection-DYYF-In-.js +319 -0
  35. package/dist/chunks/TaxSettingsCollection-DYYF-In-.js.map +1 -0
  36. package/dist/chunks/{money-DfrRxrel.js → allocation-integrity-Cq0g6CfO.js} +7 -12
  37. package/dist/chunks/allocation-integrity-Cq0g6CfO.js.map +1 -0
  38. package/dist/chunks/{calculations-Bz7RB3qK.js → calculations-DaHR17il.js} +134 -54
  39. package/dist/chunks/calculations-DaHR17il.js.map +1 -0
  40. package/dist/chunks/credit-allocation-yspz0Lab.js +121 -0
  41. package/dist/chunks/credit-allocation-yspz0Lab.js.map +1 -0
  42. package/dist/chunks/document-money-oUDvdjOf.js +860 -0
  43. package/dist/chunks/document-money-oUDvdjOf.js.map +1 -0
  44. package/dist/chunks/invoice-posting-CF3fE_Ec.js +229 -0
  45. package/dist/chunks/invoice-posting-CF3fE_Ec.js.map +1 -0
  46. package/dist/chunks/money-rational-CcW7gzG5.js +64 -0
  47. package/dist/chunks/money-rational-CcW7gzG5.js.map +1 -0
  48. package/dist/chunks/revenue-journal-DY9fro8E.js +140 -0
  49. package/dist/chunks/revenue-journal-DY9fro8E.js.map +1 -0
  50. package/dist/chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  51. package/dist/chunks/tenant-money-barrier-y6EAa6vY.js +135 -0
  52. package/dist/chunks/tenant-money-barrier-y6EAa6vY.js.map +1 -0
  53. package/dist/chunks/{types-zVnIjSOk.js → types-Bbm0Xflc.js} +4 -14
  54. package/dist/chunks/types-Bbm0Xflc.js.map +1 -0
  55. package/dist/chunks/{units-BpZ0_Dpk.js → units-CNcjH_eE.js} +2 -2
  56. package/dist/chunks/{units-BpZ0_Dpk.js.map → units-CNcjH_eE.js.map} +1 -1
  57. package/dist/collections/ContractCollection.d.ts +35 -1
  58. package/dist/collections/ContractCollection.d.ts.map +1 -1
  59. package/dist/collections/ContractLineItemCollection.d.ts +26 -1
  60. package/dist/collections/ContractLineItemCollection.d.ts.map +1 -1
  61. package/dist/collections/DocumentTaxCollection.d.ts +75 -0
  62. package/dist/collections/DocumentTaxCollection.d.ts.map +1 -0
  63. package/dist/collections/InvoiceCollection.d.ts +26 -1
  64. package/dist/collections/InvoiceCollection.d.ts.map +1 -1
  65. package/dist/collections/InvoiceLineItemCollection.d.ts +26 -1
  66. package/dist/collections/InvoiceLineItemCollection.d.ts.map +1 -1
  67. package/dist/collections/MoneyMigrationDocumentCollection.d.ts +12 -0
  68. package/dist/collections/MoneyMigrationDocumentCollection.d.ts.map +1 -0
  69. package/dist/collections/PaymentAllocationCollection.d.ts +2 -0
  70. package/dist/collections/PaymentAllocationCollection.d.ts.map +1 -1
  71. package/dist/collections/TaxCodeCollection.d.ts +7 -0
  72. package/dist/collections/TaxCodeCollection.d.ts.map +1 -0
  73. package/dist/collections/TaxComponentCollection.d.ts +6 -0
  74. package/dist/collections/TaxComponentCollection.d.ts.map +1 -0
  75. package/dist/collections/TaxSettingsCollection.d.ts +16 -0
  76. package/dist/collections/TaxSettingsCollection.d.ts.map +1 -0
  77. package/dist/collections/TaxSummaryReportCollection.d.ts +151 -0
  78. package/dist/collections/TaxSummaryReportCollection.d.ts.map +1 -0
  79. package/dist/collections/index.d.ts +6 -0
  80. package/dist/collections/index.d.ts.map +1 -1
  81. package/dist/commerce-money-tools.d.ts +9 -0
  82. package/dist/commerce-money-tools.d.ts.map +1 -0
  83. package/dist/contract-money.d.ts +27 -0
  84. package/dist/contract-money.d.ts.map +1 -0
  85. package/dist/cost-billing.d.ts +0 -1
  86. package/dist/cost-billing.d.ts.map +1 -1
  87. package/dist/cost-billing.js +10 -15
  88. package/dist/cost-billing.js.map +1 -1
  89. package/dist/credit-allocation.d.ts +48 -0
  90. package/dist/credit-allocation.d.ts.map +1 -0
  91. package/dist/document-money-internal.d.ts +44 -0
  92. package/dist/document-money-internal.d.ts.map +1 -0
  93. package/dist/document-money.d.ts +85 -0
  94. package/dist/document-money.d.ts.map +1 -0
  95. package/dist/index.d.ts +15 -4
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +5411 -4249
  98. package/dist/index.js.map +1 -1
  99. package/dist/invoice-accounting-sync.d.ts +96 -0
  100. package/dist/invoice-accounting-sync.d.ts.map +1 -0
  101. package/dist/invoice-mcp.d.ts +16 -0
  102. package/dist/invoice-mcp.d.ts.map +1 -0
  103. package/dist/invoice-posting.d.ts +9 -0
  104. package/dist/invoice-posting.d.ts.map +1 -0
  105. package/dist/invoice-record-screen.d.ts +60 -0
  106. package/dist/invoice-record-screen.d.ts.map +1 -0
  107. package/dist/invoices.d.ts +2 -0
  108. package/dist/invoices.d.ts.map +1 -1
  109. package/dist/invoices.js +3 -2
  110. package/dist/manifest.json +12804 -6095
  111. package/dist/migrations/commerceLineAmounts.d.ts +84 -0
  112. package/dist/migrations/commerceLineAmounts.d.ts.map +1 -0
  113. package/dist/migrations/partyLinks.d.ts.map +1 -1
  114. package/dist/models/Contract.d.ts +34 -4
  115. package/dist/models/Contract.d.ts.map +1 -1
  116. package/dist/models/ContractLineItem.d.ts +43 -6
  117. package/dist/models/ContractLineItem.d.ts.map +1 -1
  118. package/dist/models/Customer.d.ts +7 -0
  119. package/dist/models/Customer.d.ts.map +1 -1
  120. package/dist/models/DocumentTax.d.ts +50 -0
  121. package/dist/models/DocumentTax.d.ts.map +1 -0
  122. package/dist/models/Invoice.d.ts +46 -2
  123. package/dist/models/Invoice.d.ts.map +1 -1
  124. package/dist/models/InvoiceLineItem.d.ts +46 -5
  125. package/dist/models/InvoiceLineItem.d.ts.map +1 -1
  126. package/dist/models/MoneyMigrationDocument.d.ts +28 -0
  127. package/dist/models/MoneyMigrationDocument.d.ts.map +1 -0
  128. package/dist/models/Payment.d.ts +5 -1
  129. package/dist/models/Payment.d.ts.map +1 -1
  130. package/dist/models/PaymentAllocation.d.ts.map +1 -1
  131. package/dist/models/TaxCode.d.ts +22 -0
  132. package/dist/models/TaxCode.d.ts.map +1 -0
  133. package/dist/models/TaxComponent.d.ts +21 -0
  134. package/dist/models/TaxComponent.d.ts.map +1 -0
  135. package/dist/models/TaxSettings.d.ts +33 -0
  136. package/dist/models/TaxSettings.d.ts.map +1 -0
  137. package/dist/models/TaxSummaryReport.d.ts +35 -0
  138. package/dist/models/TaxSummaryReport.d.ts.map +1 -0
  139. package/dist/models/Vendor.d.ts +9 -0
  140. package/dist/models/Vendor.d.ts.map +1 -1
  141. package/dist/models/index.d.ts +7 -1
  142. package/dist/models/index.d.ts.map +1 -1
  143. package/dist/money-rational.d.ts +15 -0
  144. package/dist/money-rational.d.ts.map +1 -0
  145. package/dist/money.d.ts +106 -25
  146. package/dist/money.d.ts.map +1 -1
  147. package/dist/money.js +274 -0
  148. package/dist/money.js.map +1 -0
  149. package/dist/recipes.d.ts +15 -15
  150. package/dist/revenue-journal.d.ts +61 -0
  151. package/dist/revenue-journal.d.ts.map +1 -0
  152. package/dist/smrt-knowledge.json +9621 -7592
  153. package/dist/svelte/components/InvoiceActions.svelte +12 -0
  154. package/dist/svelte/components/InvoiceActions.svelte.d.ts +5 -0
  155. package/dist/svelte/components/InvoiceActions.svelte.d.ts.map +1 -1
  156. package/dist/svelte/components/InvoiceEditor.svelte +15 -1
  157. package/dist/svelte/components/InvoiceEditor.svelte.d.ts.map +1 -1
  158. package/dist/svelte/components/InvoiceLineItems.svelte +3 -3
  159. package/dist/svelte/components/InvoiceRecordScreen.svelte +94 -0
  160. package/dist/svelte/components/InvoiceRecordScreen.svelte.d.ts +21 -0
  161. package/dist/svelte/components/InvoiceRecordScreen.svelte.d.ts.map +1 -0
  162. package/dist/svelte/components/InvoiceTotals.svelte +2 -2
  163. package/dist/svelte/components/MoneyInvoiceEditor.svelte +282 -0
  164. package/dist/svelte/components/MoneyInvoiceEditor.svelte.d.ts +31 -0
  165. package/dist/svelte/components/MoneyInvoiceEditor.svelte.d.ts.map +1 -0
  166. package/dist/svelte/components/PurchaseOrderEditor.svelte +53 -1
  167. package/dist/svelte/components/PurchaseOrderEditor.svelte.d.ts +5 -0
  168. package/dist/svelte/components/PurchaseOrderEditor.svelte.d.ts.map +1 -1
  169. package/dist/svelte/components/QuoteEditor.svelte +54 -1
  170. package/dist/svelte/components/QuoteEditor.svelte.d.ts +5 -0
  171. package/dist/svelte/components/QuoteEditor.svelte.d.ts.map +1 -1
  172. package/dist/svelte/i18n.d.ts +16 -0
  173. package/dist/svelte/i18n.d.ts.map +1 -1
  174. package/dist/svelte/i18n.js +16 -0
  175. package/dist/svelte/index.d.ts +7 -2
  176. package/dist/svelte/index.d.ts.map +1 -1
  177. package/dist/svelte/index.js +4 -1
  178. package/dist/svelte/invoices/calculations.d.ts +7 -2
  179. package/dist/svelte/invoices/calculations.d.ts.map +1 -1
  180. package/dist/svelte/invoices/calculations.js +141 -47
  181. package/dist/svelte/invoices/money-editor.d.ts +123 -0
  182. package/dist/svelte/invoices/money-editor.d.ts.map +1 -0
  183. package/dist/svelte/invoices/money-editor.js +101 -0
  184. package/dist/svelte/invoices/types.d.ts +5 -1
  185. package/dist/svelte/invoices/types.d.ts.map +1 -1
  186. package/dist/svelte/purchasing-i18n.d.ts +5 -0
  187. package/dist/svelte/purchasing-i18n.d.ts.map +1 -1
  188. package/dist/svelte/purchasing-i18n.js +5 -0
  189. package/dist/svelte/quote-i18n.d.ts +5 -0
  190. package/dist/svelte/quote-i18n.d.ts.map +1 -1
  191. package/dist/svelte/quote-i18n.js +5 -0
  192. package/dist/tax/cookbook.d.ts +22 -0
  193. package/dist/tax/cookbook.d.ts.map +1 -0
  194. package/dist/tax/example-pack.d.ts +25 -0
  195. package/dist/tax/example-pack.d.ts.map +1 -0
  196. package/dist/tax/identity.d.ts +5 -0
  197. package/dist/tax/identity.d.ts.map +1 -0
  198. package/dist/tax/index.d.ts +4 -0
  199. package/dist/tax/index.d.ts.map +1 -0
  200. package/dist/tax/legacy.d.ts +48 -0
  201. package/dist/tax/legacy.d.ts.map +1 -0
  202. package/dist/tax-summary-report-adapter.d.ts +37 -0
  203. package/dist/tax-summary-report-adapter.d.ts.map +1 -0
  204. package/dist/tax-summary.d.ts +129 -0
  205. package/dist/tax-summary.d.ts.map +1 -0
  206. package/dist/tenant-money-barrier.d.ts +66 -0
  207. package/dist/tenant-money-barrier.d.ts.map +1 -0
  208. package/dist/types/index.d.ts +138 -1
  209. package/dist/types/index.d.ts.map +1 -1
  210. package/package.json +19 -11
  211. package/dist/chunks/calculations-Bz7RB3qK.js.map +0 -1
  212. package/dist/chunks/money-DfrRxrel.js.map +0 -1
  213. package/dist/chunks/types-zVnIjSOk.js.map +0 -1
@@ -0,0 +1,84 @@
1
+ /** Commerce line-amount preflight, migration and rollback. */
2
+ import type { DatabaseInterface } from '@happyvertical/smrt-core/migrations';
3
+ export type CommerceLineAmountReasonCode = 'DRAFT_RECOMPUTED' | 'ISSUED_BACKFILLED' | 'UNRECONCILED' | 'TAX_RATE_OVER_ONE' | 'HAND_ENTERED_AMOUNT' | 'NEGATIVE_HALF_UNIT_GROSS' | 'MISSING_HEADER_TOTALS' | 'STALE_EDITOR_BLOB' | 'ORPHAN_LINE' | 'CROSS_TENANT_LINE' | 'MISSING_LINE_TENANT' | 'CONTRACT_DIRECTION_UNKNOWN' | 'ACCOUNTING_SYNC_UNSETTLED';
4
+ export interface CommerceMoneyTotals {
5
+ subtotalMinor: number;
6
+ taxMinor: number;
7
+ totalMinor: number;
8
+ }
9
+ export interface CommerceLineAmountDocumentReport {
10
+ tenantId: string;
11
+ documentType: 'invoice' | 'contract';
12
+ documentId: string;
13
+ status: string;
14
+ arJournalIdSet: boolean;
15
+ old: CommerceMoneyTotals;
16
+ next: CommerceMoneyTotals;
17
+ delta: CommerceMoneyTotals;
18
+ reasons: CommerceLineAmountReasonCode[];
19
+ }
20
+ export interface CommerceLineAmountTenantSummary {
21
+ tenantId: string;
22
+ documentCount: number;
23
+ changingDraftCount: number;
24
+ issuedUnpostedFallbackTaxCount: number;
25
+ reasonCounts: Partial<Record<CommerceLineAmountReasonCode, number>>;
26
+ }
27
+ export interface CommerceLineAmountsReport {
28
+ version: 1;
29
+ documents: CommerceLineAmountDocumentReport[];
30
+ tenants: CommerceLineAmountTenantSummary[];
31
+ }
32
+ /** Explicit report destinations. Omit `out` to receive only structured data. */
33
+ export interface CommerceLineAmountsReportOutput {
34
+ jsonPath: string;
35
+ csvPath: string;
36
+ }
37
+ export interface PreflightCommerceLineAmountsOptions {
38
+ /**
39
+ * Optional artifact paths. Omitting this never writes files; the preflight
40
+ * still returns the complete structured CommerceLineAmountsReport.
41
+ */
42
+ out?: CommerceLineAmountsReportOutput;
43
+ /** Optional tenant restriction. Omit only from a system migration context. */
44
+ tenantId?: string;
45
+ }
46
+ export interface MigrateCommerceLineAmountsOptions {
47
+ tenantId: string;
48
+ acceptDraftChanges?: boolean;
49
+ /**
50
+ * Stable owner identity chosen before the attempt starts. Supplying it on
51
+ * the first call makes failures after the tenant claim safely resumable;
52
+ * a retry must present the same identity.
53
+ */
54
+ migrationId?: string;
55
+ }
56
+ export interface CommerceLineAmountsMigrationResult {
57
+ tenantId: string;
58
+ migrationId: string;
59
+ migrated: number;
60
+ resumed: number;
61
+ activated: boolean;
62
+ report: CommerceLineAmountsReport;
63
+ }
64
+ export interface RollbackCommerceLineAmountsOptions {
65
+ tenantId: string;
66
+ migrationId: string;
67
+ }
68
+ export interface CommerceLineAmountsRollbackResult {
69
+ tenantId: string;
70
+ migrationId: string;
71
+ restored: number;
72
+ alreadyRestored: number;
73
+ }
74
+ /** Stable JSON bytes for review artifacts and retry comparisons. */
75
+ export declare function serializeCommerceLineAmountsReportJson(report: CommerceLineAmountsReport): string;
76
+ /** Stable one-row-per-document CSV bytes. Tenant summaries remain in JSON. */
77
+ export declare function serializeCommerceLineAmountsReportCsv(report: CommerceLineAmountsReport): string;
78
+ /** Read-only migration inventory. It never creates TaxSettings or claims a barrier. */
79
+ export declare function preflightCommerceLineAmounts(db: DatabaseInterface, options?: PreflightCommerceLineAmountsOptions): Promise<CommerceLineAmountsReport>;
80
+ /** Claim one tenant, migrate each document durably, verify, then activate v2. */
81
+ export declare function migrateCommerceLineAmounts(db: DatabaseInterface, options: MigrateCommerceLineAmountsOptions): Promise<CommerceLineAmountsMigrationResult>;
82
+ /** Restore exact pre-images only while every current document still matches its post-image. */
83
+ export declare function rollbackCommerceLineAmounts(db: DatabaseInterface, options: RollbackCommerceLineAmountsOptions): Promise<CommerceLineAmountsRollbackResult>;
84
+ //# sourceMappingURL=commerceLineAmounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commerceLineAmounts.d.ts","sourceRoot":"","sources":["../../src/migrations/commerceLineAmounts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"partyLinks.d.ts","sourceRoot":"","sources":["../../src/migrations/partyLinks.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAG3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iFAAiF;AACjF,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,2BAA2B;IAC1C,wBAAwB,EAAE,oBAAoB,EAAE,CAAC;IACjD,mBAAmB,EAAE,oBAAoB,EAAE,CAAC;IAC5C,uBAAuB,EAAE,oBAAoB,EAAE,CAAC;IAChD,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,4BAA4B,EAAE,oBAAoB,EAAE,CAAC;IACrD,mBAAmB,EAAE,yBAAyB,EAAE,CAAC;IACjD,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;IACrD,sBAAsB,EAAE,gCAAgC,EAAE,CAAC;IAC3D,yBAAyB,EAAE,gCAAgC,EAAE,CAAC;CAC/D;AAuCD,yFAAyF;AACzF,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,iBAAiB,GACpB,OAAO,CAAC,2BAA2B,CAAC,CAmJtC"}
1
+ {"version":3,"file":"partyLinks.d.ts","sourceRoot":"","sources":["../../src/migrations/partyLinks.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAG3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iFAAiF;AACjF,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,2BAA2B;IAC1C,wBAAwB,EAAE,oBAAoB,EAAE,CAAC;IACjD,mBAAmB,EAAE,oBAAoB,EAAE,CAAC;IAC5C,uBAAuB,EAAE,oBAAoB,EAAE,CAAC;IAChD,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,4BAA4B,EAAE,oBAAoB,EAAE,CAAC;IACrD,mBAAmB,EAAE,yBAAyB,EAAE,CAAC;IACjD,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;IACrD,sBAAsB,EAAE,gCAAgC,EAAE,CAAC;IAC3D,yBAAyB,EAAE,gCAAgC,EAAE,CAAC;CAC/D;AA4CD,yFAAyF;AACzF,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,iBAAiB,GACpB,OAAO,CAAC,2BAA2B,CAAC,CAmJtC"}
@@ -3,14 +3,20 @@
3
3
  * @packageDocumentation
4
4
  */
5
5
  import { type Meta, SmrtObject } from '@happyvertical/smrt-core';
6
- import { type ContractOptions, ContractStatus, ContractType, type LicenseSaleOptions, type PurchaseContractOptions, type PurchaseOrderOptions, type SalesContractOptions } from '../types/index.js';
6
+ import type { DatabaseInterface } from '@happyvertical/smrt-core/migrations';
7
+ import { type DocumentMoneyReadRebindCapability, type DocumentMoneyWriteCapability } from '../document-money-internal.js';
8
+ import { type ContractOptions, ContractStatus, ContractType, type LicenseSaleOptions, type PurchaseContractOptions, type PurchaseOrderOptions, type SalesContractOptions, type TaxRegistrationOptions } from '../types/index.js';
9
+ /** Whether a Contract belongs to the purchase STI branch, including descendants. */
10
+ export declare function classifyContractPurchase(contract: Contract): boolean;
11
+ /** Frozen snapshots are reportable except cancelled contracts and supplier quotes. */
12
+ export declare function isContractSnapshotReportEligible(contract: Contract): boolean;
7
13
  /**
8
14
  * Contract is the base class for all commercial agreements.
9
15
  *
10
- * Uses Single Table Inheritance (STI) for nine leaf types. SalesContract owns
16
+ * Uses Single Table Inheritance (STI) for ten leaf types. SalesContract owns
11
17
  * the customer link for Estimate, Order, WholesaleOrder, Cart, Lease,
12
18
  * Agreement, and LicenseSale. PurchaseContract owns the vendor link for
13
- * PurchaseOrder and ProductionOrder. Both branches share `contracts`.
19
+ * SupplierQuote, PurchaseOrder and ProductionOrder. Both branches share `contracts`.
14
20
  *
15
21
  * @example
16
22
  * ```typescript
@@ -32,6 +38,8 @@ import { type ContractOptions, ContractStatus, ContractType, type LicenseSaleOpt
32
38
  * ```
33
39
  */
34
40
  export declare class Contract extends SmrtObject {
41
+ /** @internal Collection read guard returns this snapshot on its root DB. */
42
+ rebindMoneyRead(capability: DocumentMoneyReadRebindCapability, db: DatabaseInterface): this;
35
43
  /**
36
44
  * Tenant ID for multi-tenant isolation
37
45
  * Nullable to support both tenant-scoped and global contracts
@@ -54,6 +62,8 @@ export declare class Contract extends SmrtObject {
54
62
  * (#2401).
55
63
  */
56
64
  subtotal: number;
65
+ /** Informational sum of resolved line discounts, in integer minor units. */
66
+ discountTotal: number;
57
67
  /**
58
68
  * Tax amount, in integer minor units (#2401).
59
69
  */
@@ -66,6 +76,18 @@ export declare class Contract extends SmrtObject {
66
76
  * Currency code (ISO 4217)
67
77
  */
68
78
  currency: string;
79
+ /** Pricing interpretation fixed before the Contract leaves draft. */
80
+ lineAmountType: 'exclusive' | 'inclusive' | 'none';
81
+ /** Component rounding scope fixed before the Contract leaves draft. */
82
+ taxRoundingScope: 'line' | 'document';
83
+ /** Immutable seller registration snapshot once the Contract leaves draft. */
84
+ sellerTaxRegistrationsJson: string;
85
+ get sellerTaxRegistrations(): TaxRegistrationOptions[];
86
+ set sellerTaxRegistrations(value: TaxRegistrationOptions[]);
87
+ /** Immutable customer or vendor tax identifier snapshot after issue. */
88
+ partyTaxId: string;
89
+ /** Stable issue/freeze identity, independent of lifecycle updated_at. */
90
+ moneySnapshotId: string;
69
91
  /**
70
92
  * Date contract was issued
71
93
  */
@@ -146,6 +168,8 @@ export declare class Contract extends SmrtObject {
146
168
  * write surface (#2401).
147
169
  */
148
170
  save(): Promise<this>;
171
+ /** @internal Contract aggregate persistence only. */
172
+ saveDerived(capability: DocumentMoneyWriteCapability): Promise<this>;
149
173
  /**
150
174
  * Reject an illegal status flip done via raw assignment. No-op transitions
151
175
  * and brand-new rows are always allowed.
@@ -174,7 +198,7 @@ export declare abstract class SalesContract extends Contract {
174
198
  customerId: string | null;
175
199
  constructor(options?: SalesContractOptions);
176
200
  }
177
- /** Supplier-side contracts, including purchase and production orders. */
201
+ /** Supplier-side contracts, including supplier quotes, purchase and production orders. */
178
202
  export declare abstract class PurchaseContract extends Contract {
179
203
  vendorId: string | null;
180
204
  constructor(options?: PurchaseContractOptions);
@@ -211,6 +235,12 @@ export declare class Agreement extends SalesContract {
211
235
  contractType: ContractType;
212
236
  constructor(options?: SalesContractOptions);
213
237
  }
238
+ /** Supplier quotation received from a vendor; acceptance does not create an order. */
239
+ export declare class SupplierQuote extends PurchaseContract {
240
+ vendorId: string | null;
241
+ contractType: ContractType;
242
+ constructor(options?: PurchaseContractOptions);
243
+ }
214
244
  /**
215
245
  * PurchaseOrder - Order sent to vendor/supplier
216
246
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Contract.d.ts","sourceRoot":"","sources":["../../src/models/Contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Contract.d.ts","sourceRoot":"","sources":["../../src/models/Contract.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,9 @@
3
3
  * @packageDocumentation
4
4
  */
5
5
  import { SmrtObject } from '@happyvertical/smrt-core';
6
- import type { ContractLineItemOptions } from '../types/index.js';
6
+ import type { DatabaseInterface } from '@happyvertical/smrt-core/migrations';
7
+ import { type DocumentMoneyReadRebindCapability, type DocumentMoneyWriteCapability } from '../document-money-internal.js';
8
+ import type { ContractLineItemOptions, ContractTaxComponentSnapshot } from '../types/index.js';
7
9
  /**
8
10
  * ContractLineItem represents a single line item on a contract.
9
11
  *
@@ -22,6 +24,8 @@ import type { ContractLineItemOptions } from '../types/index.js';
22
24
  * ```
23
25
  */
24
26
  export declare class ContractLineItem extends SmrtObject {
27
+ /** @internal Collection read guard returns this snapshot on its root DB. */
28
+ rebindMoneyRead(capability: DocumentMoneyReadRebindCapability, db: DatabaseInterface): this;
25
29
  /**
26
30
  * Tenant ID for multi-tenant isolation
27
31
  * Nullable to support both tenant-scoped and global line items
@@ -41,7 +45,9 @@ export declare class ContractLineItem extends SmrtObject {
41
45
  */
42
46
  quantity: number;
43
47
  /**
44
- * Unit price before discount, in **integer minor units** (cents, satoshis).
48
+ * Unit price before discount, in **integer minor units** (cents, satoshis),
49
+ * in the document's pricing mode: tax-inclusive when its `lineAmountType`
50
+ * is `inclusive`.
45
51
  *
46
52
  * The `= 0` initializer is load-bearing: SMRT maps an integer literal to
47
53
  * INTEGER and a decimal literal to DECIMAL. Money is exact, so `$49.99` is
@@ -52,15 +58,36 @@ export declare class ContractLineItem extends SmrtObject {
52
58
  * Discount amount (flat, not percentage), in integer minor units (#2401).
53
59
  */
54
60
  discount: number;
61
+ discountType: 'none' | 'percent' | 'amount';
62
+ discountRate: string;
55
63
  /**
56
64
  * Tax rate as decimal (e.g., 0.08 for 8%). A rate is inherently fractional,
57
65
  * so it stays DECIMAL — INTEGER would truncate every meaningful value.
58
66
  */
59
67
  taxRate: number;
60
- /**
61
- * Calculated line amount (qty * price - discount + tax), in integer minor
62
- * units. Derived by {@link ContractLineItem.calculateAmount}, which rounds
63
- * the fractional tax to a whole minor unit (#2401).
68
+ taxMode: 'inherit' | 'override';
69
+ taxCodeId: string | null;
70
+ taxCodeCode: string | null;
71
+ taxCodeName: string | null;
72
+ taxComponentsJson: string | null;
73
+ get taxComponents(): ContractTaxComponentSnapshot[];
74
+ set taxComponents(value: ContractTaxComponentSnapshot[]);
75
+ /** Exact sum of frozen component taxes, in integer minor units. */
76
+ taxAmount: number;
77
+ /**
78
+ * @internal Pre-v2 amount preserved only by the migration path for
79
+ * rollback; not a user-facing amount, so it carries no money hint.
80
+ */
81
+ legacyAmount: number | null;
82
+ /** Stable issue/freeze identity, independent of lifecycle updated_at. */
83
+ moneySnapshotId: string;
84
+ /**
85
+ * Calculated line amount, in integer minor units. Under money v2 it is net
86
+ * of discount and before tax for `exclusive` / `none` documents, and
87
+ * tax-inclusive for `inclusive` ones; {@link taxAmount} holds the tax. The
88
+ * legacy model stores qty * price - discount + tax, derived by
89
+ * {@link ContractLineItem.calculateAmount}, which rounds the fractional tax
90
+ * to a whole minor unit (#2401).
64
91
  */
65
92
  amount: number;
66
93
  /**
@@ -98,6 +125,16 @@ export declare class ContractLineItem extends SmrtObject {
98
125
  * plain `===` instead of an epsilon tolerance (#2401).
99
126
  */
100
127
  calculateAmount(): number;
128
+ save(): Promise<this>;
129
+ /** @internal Contract aggregate persistence only. */
130
+ saveDerived(capability: DocumentMoneyWriteCapability, legacy: boolean): Promise<this>;
131
+ delete(options?: {
132
+ expectedUpdatedAt?: Date | string;
133
+ }): Promise<void>;
134
+ /** @internal Contract aggregate persistence only. */
135
+ deleteDerived(capability: DocumentMoneyWriteCapability, options?: {
136
+ expectedUpdatedAt?: Date | string;
137
+ }): Promise<void>;
101
138
  /**
102
139
  * Check if this is a subscription/recurring item
103
140
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ContractLineItem.d.ts","sourceRoot":"","sources":["../../src/models/ContractLineItem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAOa,gBAAiB,SAAQ,UAAU;IAC9C;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IAGH,UAAU,EAAE,MAAM,CAAM;IAExB;;OAEG;IAEH,WAAW,EAAE,MAAM,CAAM;IAEzB;;;OAGG;IAEH,QAAQ,EAAE,MAAM,CAAO;IAEvB;;;;;;OAMG;IAKH,SAAS,EAAE,MAAM,CAAK;IAEtB;;OAEG;IAEH,QAAQ,EAAE,MAAM,CAAK;IAErB;;;OAGG;IAIH,OAAO,EAAE,MAAM,CAAO;IAEtB;;;;OAIG;IAEH,MAAM,EAAE,MAAM,CAAK;IAEnB;;OAEG;IAKH,SAAS,EAAE,MAAM,CAAM;IAEvB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAM;IAEjB;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE9B;;OAEG;IACH,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAM;IAE3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAK;gBAEV,OAAO,GAAE,uBAA4B;IAoBjD;;;;;;;;OAQG;IACH,eAAe,IAAI,MAAM;IAMzB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,oBAAoB,IAAI,OAAO;CAUhC;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"ContractLineItem.d.ts","sourceRoot":"","sources":["../../src/models/ContractLineItem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAGL,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;GAgBG;AACH,qBAOa,gBAAiB,SAAQ,UAAU;IAC9C,4EAA4E;IAC5E,eAAe,CACb,UAAU,EAAE,iCAAiC,EAC7C,EAAE,EAAE,iBAAiB,GACpB,IAAI;IAUP;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IAGH,UAAU,EAAE,MAAM,CAAM;IAExB;;OAEG;IAEH,WAAW,EAAE,MAAM,CAAM;IAEzB;;;OAGG;IAEH,QAAQ,EAAE,MAAM,CAAO;IAEvB;;;;;;;;OAQG;IAMH,SAAS,EAAE,MAAM,CAAK;IAEtB;;OAEG;IAEH,QAAQ,EAAE,MAAM,CAAK;IAErB,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAU;IAGrD,YAAY,SAAS;IAErB;;;OAGG;IAKH,OAAO,EAAE,MAAM,CAAO;IAEtB,OAAO,EAAE,SAAS,GAAG,UAAU,CAAa;IAG5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAElC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAElC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC,IAAI,aAAa,IAAI,4BAA4B,EAAE,CAoBlD;IAED,IAAI,aAAa,CAAC,KAAK,EAAE,4BAA4B,EAAE,EAEtD;IAED,mEAAmE;IAEnE,SAAS,SAAK;IAEd;;;OAGG;IAEH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEnC,yEAAyE;IACzE,eAAe,SAAM;IAErB;;;;;;;OAOG;IAMH,MAAM,EAAE,MAAM,CAAK;IAEnB;;OAEG;IAKH,SAAS,EAAE,MAAM,CAAM;IAEvB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAM;IAEjB;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE9B;;OAEG;IACH,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAM;IAE3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAK;gBAEV,OAAO,GAAE,uBAA4B;IAuCjD;;;;;;;;OAQG;IACH,eAAe,IAAI,MAAM;IAMV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC,qDAAqD;IAC/C,WAAW,CACf,UAAU,EAAE,4BAA4B,EACxC,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IAOD,MAAM,CACnB,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;KAAO,GAClD,OAAO,CAAC,IAAI,CAAC;IAKhB,qDAAqD;IAC/C,aAAa,CACjB,UAAU,EAAE,4BAA4B,EACxC,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;KAAO,GAClD,OAAO,CAAC,IAAI,CAAC;IAMhB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,oBAAoB,IAAI,OAAO;CAUhC;AAED,eAAe,gBAAgB,CAAC"}
@@ -55,6 +55,13 @@ export declare class Customer extends SmrtObject {
55
55
  * rejected as a `where` filter key.
56
56
  */
57
57
  taxId: string;
58
+ /**
59
+ * Tax code normally used for this customer's sales.
60
+ *
61
+ * An exempt customer always resolves to the tenant's exempt code before
62
+ * this preference is considered.
63
+ */
64
+ defaultTaxCodeId: string;
58
65
  /**
59
66
  * Default shipping address
60
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Customer.d.ts","sourceRoot":"","sources":["../../src/models/Customer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,cAAc,EACd,YAAY,EACZ,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;GAcG;AACH,qBAMa,QAAS,SAAQ,UAAU;IACtC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;OAGG;IAKH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;;;;;;OAQG;IAMH,WAAW,EAAE,MAAM,CAAK;IAExB;;OAEG;IAKH,YAAY,EAAE,MAAM,CAAM;IAE1B;;OAEG;IAIH,SAAS,EAAE,OAAO,CAAS;IAE3B;;;;;OAKG;IAMH,KAAK,EAAE,MAAM,CAAM;IAEnB;;OAEG;IAKH,sBAAsB,EAAE,OAAO,CAAM;IAErC;;OAEG;IAEH,qBAAqB,EAAE,OAAO,CAAM;IAEpC;;OAEG;IAKH,MAAM,EAAE,cAAc,CAAyB;IAE/C;;;;;OAKG;IAKH,YAAY,EAAE,YAAY,CAAoB;IAE9C;;OAEG;IAKH,KAAK,EAAE,MAAM,CAAM;IAEnB;;;OAGG;IAKH,QAAQ,EAAE,YAAY,EAAE,CAAM;gBAElB,OAAO,GAAE,eAAoB;IA8BzC;;;OAGG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1C,0EAA0E;IAC3D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK3C;;;;;;;;;;OAUG;IACH,YAAY,IAAI,MAAM;CAGvB;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Customer.d.ts","sourceRoot":"","sources":["../../src/models/Customer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,cAAc,EACd,YAAY,EACZ,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;GAcG;AACH,qBAMa,QAAS,SAAQ,UAAU;IACtC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;OAGG;IAKH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;;;;;;OAQG;IAMH,WAAW,EAAE,MAAM,CAAK;IAExB;;OAEG;IAKH,YAAY,EAAE,MAAM,CAAM;IAE1B;;OAEG;IAIH,SAAS,EAAE,OAAO,CAAS;IAE3B;;;;;OAKG;IAMH,KAAK,EAAE,MAAM,CAAM;IAEnB;;;;;OAKG;IAIH,gBAAgB,EAAE,MAAM,CAAM;IAE9B;;OAEG;IAKH,sBAAsB,EAAE,OAAO,CAAM;IAErC;;OAEG;IAEH,qBAAqB,EAAE,OAAO,CAAM;IAEpC;;OAEG;IAKH,MAAM,EAAE,cAAc,CAAyB;IAE/C;;;;;OAKG;IAKH,YAAY,EAAE,YAAY,CAAoB;IAE9C;;OAEG;IAKH,KAAK,EAAE,MAAM,CAAM;IAEnB;;;OAGG;IAKH,QAAQ,EAAE,YAAY,EAAE,CAAM;gBAElB,OAAO,GAAE,eAAoB;IAgCzC;;;OAGG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1C,0EAA0E;IAC3D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK3C;;;;;;;;;;OAUG;IACH,YAAY,IAAI,MAAM;CAGvB;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,50 @@
1
+ /** Persisted per-code/component tax totals for a commerce document. */
2
+ import { SmrtObject, type SmrtObjectOptions } from '@happyvertical/smrt-core';
3
+ import { type DocumentMoneyWriteCapability } from '../document-money-internal.js';
4
+ import { type TaxCodeKind } from '../money.js';
5
+ export type CommerceDocumentType = 'invoice' | 'contract' | 'credit_note';
6
+ export interface DocumentTaxOptions extends SmrtObjectOptions {
7
+ tenantId?: string;
8
+ documentType?: CommerceDocumentType;
9
+ documentId?: string;
10
+ currency?: string;
11
+ taxCodeId?: string | null;
12
+ taxCodeCode?: string | null;
13
+ kind?: TaxCodeKind | null;
14
+ taxComponentId?: string | null;
15
+ taxComponentName?: string | null;
16
+ percent?: string | null;
17
+ liabilityAccountId?: string | null;
18
+ taxableMinor?: number;
19
+ taxMinor?: number;
20
+ recoverableMinor?: number;
21
+ }
22
+ export declare class DocumentTax extends SmrtObject {
23
+ tenantId: string;
24
+ documentType: CommerceDocumentType;
25
+ documentId: string;
26
+ currency: string;
27
+ taxCodeId: string | null;
28
+ taxCodeCode: string | null;
29
+ kind: TaxCodeKind | null;
30
+ taxComponentId: string | null;
31
+ taxComponentName: string | null;
32
+ percent: string | null;
33
+ liabilityAccountId: string | null;
34
+ taxableMinor: number;
35
+ taxMinor: number;
36
+ recoverableMinor: number;
37
+ constructor(options?: DocumentTaxOptions);
38
+ private assertValidDerivedRow;
39
+ save(): Promise<this>;
40
+ delete(_options?: {
41
+ expectedUpdatedAt?: Date | string;
42
+ }): Promise<void>;
43
+ /** @internal Aggregate persistence only. */
44
+ saveDerived(capability: DocumentMoneyWriteCapability): Promise<this>;
45
+ /** @internal Aggregate persistence only. */
46
+ deleteDerived(capability: DocumentMoneyWriteCapability, options?: {
47
+ expectedUpdatedAt?: Date | string;
48
+ }): Promise<void>;
49
+ }
50
+ //# sourceMappingURL=DocumentTax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentTax.d.ts","sourceRoot":"","sources":["../../src/models/DocumentTax.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AACD,qBAaa,WAAY,SAAQ,UAAU;IAEzC,QAAQ,SAAM;IAGd,YAAY,EAAE,oBAAoB,CAAa;IAG/C,UAAU,SAAM;IAGhB,QAAQ,SAAS;IAGjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGhC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGlC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAQ;IAGhC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGrC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGvC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAMzC,YAAY,SAAK;IAMjB,QAAQ,SAAK;IAMb,gBAAgB,SAAK;gBAET,OAAO,GAAE,kBAAuB;IAyB5C,OAAO,CAAC,qBAAqB;IAwFd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,MAAM,CACnB,QAAQ,GAAE;QAAE,iBAAiB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;KAAO,GACnD,OAAO,CAAC,IAAI,CAAC;IAOhB,4CAA4C;IACtC,WAAW,CAAC,UAAU,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E,4CAA4C;IACtC,aAAa,CACjB,UAAU,EAAE,4BAA4B,EACxC,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;KAAO,GAClD,OAAO,CAAC,IAAI,CAAC;CASjB"}
@@ -3,8 +3,11 @@
3
3
  * @packageDocumentation
4
4
  */
5
5
  import { SmrtObject } from '@happyvertical/smrt-core';
6
+ import type { DatabaseInterface } from '@happyvertical/smrt-core/migrations';
6
7
  import type { Journal } from '@happyvertical/smrt-ledgers';
7
- import { type AccountingInvoiceInput, type InvoiceCollectionMethod, type InvoiceOptions, InvoiceStatus, type RecognizeRevenueOptions } from '../types/index.js';
8
+ import { type DocumentMoneyReadRebindCapability, type DocumentMoneyWriteCapability } from '../document-money-internal.js';
9
+ import type { FrozenInvoiceAccountingOptions } from '../invoice-accounting-sync.js';
10
+ import { type AccountingInvoiceInput, type CancelRevenueOptions, type InvoiceCollectionMethod, type InvoiceKind, type InvoiceOptions, InvoiceStatus, type RecognizeRevenueOptions, type TaxRegistrationOptions } from '../types/index.js';
8
11
  /**
9
12
  * Invoice represents a bill sent to a customer for goods or services.
10
13
  *
@@ -38,6 +41,12 @@ import { type AccountingInvoiceInput, type InvoiceCollectionMethod, type Invoice
38
41
  * ```
39
42
  */
40
43
  export declare class Invoice extends SmrtObject {
44
+ /** @internal Collection read guard returns this snapshot on its root DB. */
45
+ rebindMoneyRead(capability: DocumentMoneyReadRebindCapability, db: DatabaseInterface): this;
46
+ kind: InvoiceKind;
47
+ creditedInvoiceId: string | null;
48
+ /** Issued credit-note total cached under the source invoice lock. */
49
+ creditedAmount: number;
41
50
  /**
42
51
  * Tenant ID for multi-tenant isolation
43
52
  * Nullable to support both tenant-scoped and global invoices
@@ -107,6 +116,20 @@ export declare class Invoice extends SmrtObject {
107
116
  * Currency code (ISO 4217)
108
117
  */
109
118
  currency: string;
119
+ /** Pricing interpretation fixed for the document before issue. */
120
+ lineAmountType: 'exclusive' | 'inclusive' | 'none';
121
+ /** Component rounding scope fixed for the document before issue. */
122
+ taxRoundingScope: 'line' | 'document';
123
+ /** Informational sum of resolved line discounts, in minor units. */
124
+ discountTotal: number;
125
+ /** Immutable seller registration snapshot once the invoice leaves draft. */
126
+ sellerTaxRegistrationsJson: string;
127
+ get sellerTaxRegistrations(): TaxRegistrationOptions[];
128
+ set sellerTaxRegistrations(value: TaxRegistrationOptions[]);
129
+ /** Immutable customer tax identifier snapshot once issued. */
130
+ partyTaxId: string;
131
+ /** Stable issue/freeze identity, independent of lifecycle updated_at. */
132
+ moneySnapshotId: string;
110
133
  /**
111
134
  * Current invoice status
112
135
  */
@@ -115,6 +138,8 @@ export declare class Invoice extends SmrtObject {
115
138
  * Journal ID for AR recognition (cross-package ref to smrt-ledgers)
116
139
  */
117
140
  arJournalId: string;
141
+ /** Posted journal that exactly reverses arJournalId on cancellation. */
142
+ arReversalJournalId: string | null;
118
143
  /**
119
144
  * Journal ID for revenue recognition (cross-package ref to smrt-ledgers)
120
145
  */
@@ -136,6 +161,8 @@ export declare class Invoice extends SmrtObject {
136
161
  * When invoice was last synced to provider
137
162
  */
138
163
  syncedAt: Date | null;
164
+ /** Server-owned prepared/in-flight/result identity for frozen accounting sync. */
165
+ accountingSyncStateJson: string;
139
166
  /**
140
167
  * How the provider collects this invoice (#3190), decided once by billing
141
168
  * period close before its first push and reused on every retry, so it is
@@ -205,6 +232,17 @@ export declare class Invoice extends SmrtObject {
205
232
  * - **Status transitions** are validated against the prior persisted status.
206
233
  */
207
234
  save(): Promise<this>;
235
+ /** @internal Aggregate persistence only. */
236
+ saveDerived(capability: DocumentMoneyWriteCapability, options: {
237
+ recomputeLegacy: boolean;
238
+ }): Promise<this>;
239
+ delete(options?: {
240
+ expectedUpdatedAt?: Date | string;
241
+ }): Promise<void>;
242
+ /** @internal Aggregate persistence only. */
243
+ deleteDerived(capability: DocumentMoneyWriteCapability, options?: {
244
+ expectedUpdatedAt?: Date | string;
245
+ }): Promise<void>;
208
246
  /**
209
247
  * Resolve the AUTHORITATIVE prior status (S5 audit #1390 round 4). The
210
248
  * {@link loadedInvoiceStatus} WeakMap is only populated when {@link initialize}
@@ -222,6 +260,7 @@ export declare class Invoice extends SmrtObject {
222
260
  * (the dynamic imports stay inside the package).
223
261
  */
224
262
  private recomputeAmountsForSave;
263
+ private recomputeAmountPaid;
225
264
  /**
226
265
  * Whether `amountPaid` covers `totalAmount`. This is the SINGLE source of
227
266
  * truth for the **PAID** decision — both {@link updatePaymentStatus} (which
@@ -311,6 +350,8 @@ export declare class Invoice extends SmrtObject {
311
350
  * Get remaining amount due
312
351
  */
313
352
  getAmountDue(): number;
353
+ /** Signed amount still owed after payments and issued credit notes. */
354
+ getBalance(): number;
314
355
  /**
315
356
  * Mark invoice as sent
316
357
  */
@@ -337,6 +378,8 @@ export declare class Invoice extends SmrtObject {
337
378
  * Cancel the invoice
338
379
  */
339
380
  cancel(): void;
381
+ /** Cancel a posted money-v2 invoice with an exact atomic journal reversal. */
382
+ cancelWithRevenueReversal(options: CancelRevenueOptions): Promise<Journal | null>;
340
383
  /**
341
384
  * Write off the invoice (bad debt)
342
385
  */
@@ -388,7 +431,8 @@ export declare class Invoice extends SmrtObject {
388
431
  * await invoice.save();
389
432
  * ```
390
433
  */
391
- toAccountingInput(): Promise<AccountingInvoiceInput>;
434
+ toAccountingInput(options?: FrozenInvoiceAccountingOptions): Promise<AccountingInvoiceInput>;
435
+ private toAccountingInputLocked;
392
436
  }
393
437
  export default Invoice;
394
438
  //# sourceMappingURL=Invoice.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Invoice.d.ts","sourceRoot":"","sources":["../../src/models/Invoice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Invoice.d.ts","sourceRoot":"","sources":["../../src/models/Invoice.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,10 @@
3
3
  * @packageDocumentation
4
4
  */
5
5
  import { SmrtObject } from '@happyvertical/smrt-core';
6
+ import type { DatabaseInterface } from '@happyvertical/smrt-core/migrations';
7
+ import { type DocumentMoneyReadRebindCapability, type DocumentMoneyWriteCapability } from '../document-money-internal.js';
6
8
  import { type InvoiceCalculationContext, type InvoiceLineDraft } from '../svelte/invoices/calculations.js';
7
- import type { AccountingLineItemInput, InvoiceLineEditorState, InvoiceLineItemOptions } from '../types/index.js';
9
+ import type { AccountingLineItemInput, InvoiceCreditCalculationBasis, InvoiceLineEditorState, InvoiceLineItemOptions, InvoiceTaxComponentSnapshot } from '../types/index.js';
8
10
  /**
9
11
  * InvoiceLineItem represents a single line item on an invoice.
10
12
  *
@@ -27,6 +29,8 @@ import type { AccountingLineItemInput, InvoiceLineEditorState, InvoiceLineItemOp
27
29
  * ```
28
30
  */
29
31
  export declare class InvoiceLineItem extends SmrtObject {
32
+ /** @internal Collection read guard returns this snapshot on its root DB. */
33
+ rebindMoneyRead(capability: DocumentMoneyReadRebindCapability, db: DatabaseInterface): this;
30
34
  /**
31
35
  * Tenant ID for multi-tenant isolation
32
36
  * Nullable to support both tenant-scoped and global invoice line items
@@ -36,6 +40,10 @@ export declare class InvoiceLineItem extends SmrtObject {
36
40
  * Parent invoice
37
41
  */
38
42
  invoiceId: string;
43
+ creditedLineId: string | null;
44
+ creditCalculationBasisJson: string;
45
+ get creditCalculationBasis(): InvoiceCreditCalculationBasis | null;
46
+ set creditCalculationBasis(value: InvoiceCreditCalculationBasis | null);
39
47
  /**
40
48
  * Item description
41
49
  */
@@ -44,6 +52,7 @@ export declare class InvoiceLineItem extends SmrtObject {
44
52
  * SKU or item code
45
53
  */
46
54
  sku: string;
55
+ productId: string | null;
47
56
  /** Nonnegative decimal quantity (hours, weight, units), up to six fractional digits. */
48
57
  quantity: number;
49
58
  /** Raw editor modes retained only while they resolve to the authoritative model fields. */
@@ -53,7 +62,9 @@ export declare class InvoiceLineItem extends SmrtObject {
53
62
  /** Store only this model's editor state, preserving unrelated metadata. */
54
63
  set invoiceEditorState(value: InvoiceLineEditorState | null);
55
64
  /**
56
- * Unit price before discount, in **integer minor units** (cents, satoshis).
65
+ * Unit price before discount, in **integer minor units** (cents, satoshis),
66
+ * in the document's pricing mode: tax-inclusive when its `lineAmountType`
67
+ * is `inclusive`.
57
68
  *
58
69
  * Money is exact, so it is stored as minor units and never as a float —
59
70
  * `$19.99` is `1999`. An integer literal is what maps this to an INTEGER
@@ -64,6 +75,8 @@ export declare class InvoiceLineItem extends SmrtObject {
64
75
  * Discount amount (flat, not percentage), in integer minor units (#2361).
65
76
  */
66
77
  discount: number;
78
+ discountType: 'none' | 'percent' | 'amount';
79
+ discountRate: string;
67
80
  /**
68
81
  * Tax rate as a decimal fraction (e.g., 0.05 for 5%).
69
82
  *
@@ -72,8 +85,27 @@ export declare class InvoiceLineItem extends SmrtObject {
72
85
  * truncate every rate to 0 (#2361).
73
86
  */
74
87
  taxRate: number;
75
- /**
76
- * Calculated line amount, in integer minor units (#2361).
88
+ taxMode: 'inherit' | 'override';
89
+ taxCodeId: string | null;
90
+ taxCodeCode: string | null;
91
+ taxCodeName: string | null;
92
+ taxComponentsJson: string | null;
93
+ get taxComponents(): InvoiceTaxComponentSnapshot[];
94
+ set taxComponents(value: InvoiceTaxComponentSnapshot[]);
95
+ /** Exact sum of frozen component taxes, in integer minor units. */
96
+ taxAmount: number;
97
+ /**
98
+ * @internal Pre-v2 line amount preserved only by the line-amount migration
99
+ * for rollback; not a user-facing amount, so it carries no money hint.
100
+ */
101
+ legacyAmount: number | null;
102
+ /** Stable document snapshot identity; ordinary lifecycle saves do not change it. */
103
+ moneySnapshotId: string;
104
+ /**
105
+ * Calculated line amount, in integer minor units (#2361). Under money v2 it
106
+ * is net of discount and before tax for `exclusive` / `none` documents, and
107
+ * tax-inclusive for `inclusive` ones; {@link taxAmount} holds the tax. A
108
+ * legacy-model tenant still stores qty * price - discount + tax.
77
109
  */
78
110
  amount: number;
79
111
  /**
@@ -96,7 +128,7 @@ export declare class InvoiceLineItem extends SmrtObject {
96
128
  * Revenue account ID (cross-package ref to smrt-ledgers)
97
129
  * Used for revenue recognition to specific accounts
98
130
  */
99
- revenueAccountId: string;
131
+ revenueAccountId: string | null;
100
132
  /**
101
133
  * Sort order within the invoice
102
134
  */
@@ -114,6 +146,15 @@ export declare class InvoiceLineItem extends SmrtObject {
114
146
  getEditorDraft(authorizedContext: InvoiceCalculationContext): InvoiceLineDraft | null;
115
147
  /** Validate resolved fields and recompute amount before persistence; editor metadata never determines money. */
116
148
  save(): Promise<this>;
149
+ /** @internal Aggregate persistence only. */
150
+ saveDerived(capability: DocumentMoneyWriteCapability, legacy: boolean): Promise<this>;
151
+ delete(options?: {
152
+ expectedUpdatedAt?: Date | string;
153
+ }): Promise<void>;
154
+ /** @internal Aggregate persistence only. */
155
+ deleteDerived(capability: DocumentMoneyWriteCapability, options?: {
156
+ expectedUpdatedAt?: Date | string;
157
+ }): Promise<void>;
117
158
  /**
118
159
  * Check if line item has source tracking
119
160
  */