@happyvertical/smrt-commerce 0.55.24 → 0.56.1

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 (220) hide show
  1. package/AGENTS.md +11 -9
  2. package/README.md +114 -2
  3. package/agents/accounting-snapshot-mapper.md +111 -0
  4. package/agents/contract-money.md +18 -0
  5. package/agents/cost-billing.md +7 -2
  6. package/agents/document-money.md +126 -0
  7. package/agents/invoice-calculations.md +14 -2
  8. package/agents/line-amount-migration.md +50 -0
  9. package/agents/minor-unit-migration.md +20 -0
  10. package/agents/money-calculator.md +45 -0
  11. package/agents/money-model.md +113 -0
  12. package/agents/purchasing-ui.md +4 -3
  13. package/agents/quote-ui.md +3 -2
  14. package/agents/revenue-journal.md +23 -0
  15. package/agents/tax-codes.md +48 -0
  16. package/agents/tax-summary.md +126 -0
  17. package/dist/accounting-snapshot.d.ts +79 -0
  18. package/dist/accounting-snapshot.d.ts.map +1 -0
  19. package/dist/billing/runtime.d.ts +2 -0
  20. package/dist/billing/runtime.d.ts.map +1 -1
  21. package/dist/chunks/ContractLineItemCollection-DYjhj_pU.js +265 -0
  22. package/dist/chunks/ContractLineItemCollection-DYjhj_pU.js.map +1 -0
  23. package/dist/chunks/CustomerCollection-DQIujn4f.js +99 -0
  24. package/dist/chunks/CustomerCollection-DQIujn4f.js.map +1 -0
  25. package/dist/chunks/DocumentTaxCollection-BEpoqXAQ.js +1639 -0
  26. package/dist/chunks/DocumentTaxCollection-BEpoqXAQ.js.map +1 -0
  27. package/dist/chunks/InvoiceCollection-CKQflFjc.js +1047 -0
  28. package/dist/chunks/InvoiceCollection-CKQflFjc.js.map +1 -0
  29. package/dist/chunks/InvoiceLineItemCollection-CHm9zdqh.js +467 -0
  30. package/dist/chunks/InvoiceLineItemCollection-CHm9zdqh.js.map +1 -0
  31. package/dist/chunks/TaxCodeCollection-DOpzW4y8.js +149 -0
  32. package/dist/chunks/TaxCodeCollection-DOpzW4y8.js.map +1 -0
  33. package/dist/chunks/TaxComponentCollection-Cs2uXwEl.js +129 -0
  34. package/dist/chunks/TaxComponentCollection-Cs2uXwEl.js.map +1 -0
  35. package/dist/chunks/TaxSettingsCollection-BBTZDH1S.js +319 -0
  36. package/dist/chunks/TaxSettingsCollection-BBTZDH1S.js.map +1 -0
  37. package/dist/chunks/{money-DfrRxrel.js → allocation-integrity-DI3G16BN.js} +7 -12
  38. package/dist/chunks/allocation-integrity-DI3G16BN.js.map +1 -0
  39. package/dist/chunks/{calculations-Bz7RB3qK.js → calculations-DaHR17il.js} +134 -54
  40. package/dist/chunks/calculations-DaHR17il.js.map +1 -0
  41. package/dist/chunks/credit-allocation-yspz0Lab.js +121 -0
  42. package/dist/chunks/credit-allocation-yspz0Lab.js.map +1 -0
  43. package/dist/chunks/document-money-DNVhDJyC.js +860 -0
  44. package/dist/chunks/document-money-DNVhDJyC.js.map +1 -0
  45. package/dist/chunks/invoice-posting-BwV8g7z0.js +229 -0
  46. package/dist/chunks/invoice-posting-BwV8g7z0.js.map +1 -0
  47. package/dist/chunks/money-rational-CcW7gzG5.js +64 -0
  48. package/dist/chunks/money-rational-CcW7gzG5.js.map +1 -0
  49. package/dist/chunks/revenue-journal-DY9fro8E.js +140 -0
  50. package/dist/chunks/revenue-journal-DY9fro8E.js.map +1 -0
  51. package/dist/chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  52. package/dist/chunks/tenant-money-barrier-DjRXgMnX.js +135 -0
  53. package/dist/chunks/tenant-money-barrier-DjRXgMnX.js.map +1 -0
  54. package/dist/chunks/{types-zVnIjSOk.js → types-LDETvQ1C.js} +3 -14
  55. package/dist/chunks/types-LDETvQ1C.js.map +1 -0
  56. package/dist/chunks/{units-BpZ0_Dpk.js → units-CNcjH_eE.js} +2 -2
  57. package/dist/chunks/{units-BpZ0_Dpk.js.map → units-CNcjH_eE.js.map} +1 -1
  58. package/dist/collections/ContractCollection.d.ts +37 -1
  59. package/dist/collections/ContractCollection.d.ts.map +1 -1
  60. package/dist/collections/ContractLineItemCollection.d.ts +26 -1
  61. package/dist/collections/ContractLineItemCollection.d.ts.map +1 -1
  62. package/dist/collections/DocumentTaxCollection.d.ts +75 -0
  63. package/dist/collections/DocumentTaxCollection.d.ts.map +1 -0
  64. package/dist/collections/InvoiceCollection.d.ts +26 -1
  65. package/dist/collections/InvoiceCollection.d.ts.map +1 -1
  66. package/dist/collections/InvoiceLineItemCollection.d.ts +26 -1
  67. package/dist/collections/InvoiceLineItemCollection.d.ts.map +1 -1
  68. package/dist/collections/MoneyMigrationDocumentCollection.d.ts +12 -0
  69. package/dist/collections/MoneyMigrationDocumentCollection.d.ts.map +1 -0
  70. package/dist/collections/PaymentAllocationCollection.d.ts +2 -0
  71. package/dist/collections/PaymentAllocationCollection.d.ts.map +1 -1
  72. package/dist/collections/PurchaseContractCollection.d.ts +8 -0
  73. package/dist/collections/PurchaseContractCollection.d.ts.map +1 -0
  74. package/dist/collections/SalesContractCollection.d.ts +8 -0
  75. package/dist/collections/SalesContractCollection.d.ts.map +1 -0
  76. package/dist/collections/TaxCodeCollection.d.ts +7 -0
  77. package/dist/collections/TaxCodeCollection.d.ts.map +1 -0
  78. package/dist/collections/TaxComponentCollection.d.ts +6 -0
  79. package/dist/collections/TaxComponentCollection.d.ts.map +1 -0
  80. package/dist/collections/TaxSettingsCollection.d.ts +16 -0
  81. package/dist/collections/TaxSettingsCollection.d.ts.map +1 -0
  82. package/dist/collections/TaxSummaryReportCollection.d.ts +151 -0
  83. package/dist/collections/TaxSummaryReportCollection.d.ts.map +1 -0
  84. package/dist/collections/index.d.ts +8 -0
  85. package/dist/collections/index.d.ts.map +1 -1
  86. package/dist/commerce-money-tools.d.ts +9 -0
  87. package/dist/commerce-money-tools.d.ts.map +1 -0
  88. package/dist/contract-money.d.ts +27 -0
  89. package/dist/contract-money.d.ts.map +1 -0
  90. package/dist/cost-billing.d.ts +0 -1
  91. package/dist/cost-billing.d.ts.map +1 -1
  92. package/dist/cost-billing.js +10 -15
  93. package/dist/cost-billing.js.map +1 -1
  94. package/dist/credit-allocation.d.ts +48 -0
  95. package/dist/credit-allocation.d.ts.map +1 -0
  96. package/dist/document-money-internal.d.ts +44 -0
  97. package/dist/document-money-internal.d.ts.map +1 -0
  98. package/dist/document-money.d.ts +85 -0
  99. package/dist/document-money.d.ts.map +1 -0
  100. package/dist/index.d.ts +16 -4
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +5563 -4243
  103. package/dist/index.js.map +1 -1
  104. package/dist/invoice-accounting-sync.d.ts +96 -0
  105. package/dist/invoice-accounting-sync.d.ts.map +1 -0
  106. package/dist/invoice-mcp.d.ts +16 -0
  107. package/dist/invoice-mcp.d.ts.map +1 -0
  108. package/dist/invoice-posting.d.ts +9 -0
  109. package/dist/invoice-posting.d.ts.map +1 -0
  110. package/dist/invoice-record-screen.d.ts +60 -0
  111. package/dist/invoice-record-screen.d.ts.map +1 -0
  112. package/dist/invoices.d.ts +2 -0
  113. package/dist/invoices.d.ts.map +1 -1
  114. package/dist/invoices.js +3 -2
  115. package/dist/manifest.json +11605 -4598
  116. package/dist/migrations/commerceLineAmounts.d.ts +84 -0
  117. package/dist/migrations/commerceLineAmounts.d.ts.map +1 -0
  118. package/dist/migrations/partyLinks.d.ts +39 -0
  119. package/dist/migrations/partyLinks.d.ts.map +1 -0
  120. package/dist/models/Contract.d.ts +61 -27
  121. package/dist/models/Contract.d.ts.map +1 -1
  122. package/dist/models/ContractLineItem.d.ts +30 -1
  123. package/dist/models/ContractLineItem.d.ts.map +1 -1
  124. package/dist/models/Customer.d.ts +7 -0
  125. package/dist/models/Customer.d.ts.map +1 -1
  126. package/dist/models/DocumentTax.d.ts +50 -0
  127. package/dist/models/DocumentTax.d.ts.map +1 -0
  128. package/dist/models/Invoice.d.ts +46 -2
  129. package/dist/models/Invoice.d.ts.map +1 -1
  130. package/dist/models/InvoiceLineItem.d.ts +33 -2
  131. package/dist/models/InvoiceLineItem.d.ts.map +1 -1
  132. package/dist/models/MoneyMigrationDocument.d.ts +28 -0
  133. package/dist/models/MoneyMigrationDocument.d.ts.map +1 -0
  134. package/dist/models/Payment.d.ts +5 -1
  135. package/dist/models/Payment.d.ts.map +1 -1
  136. package/dist/models/PaymentAllocation.d.ts.map +1 -1
  137. package/dist/models/TaxCode.d.ts +22 -0
  138. package/dist/models/TaxCode.d.ts.map +1 -0
  139. package/dist/models/TaxComponent.d.ts +21 -0
  140. package/dist/models/TaxComponent.d.ts.map +1 -0
  141. package/dist/models/TaxSettings.d.ts +33 -0
  142. package/dist/models/TaxSettings.d.ts.map +1 -0
  143. package/dist/models/TaxSummaryReport.d.ts +35 -0
  144. package/dist/models/TaxSummaryReport.d.ts.map +1 -0
  145. package/dist/models/Vendor.d.ts +9 -0
  146. package/dist/models/Vendor.d.ts.map +1 -1
  147. package/dist/models/index.d.ts +7 -1
  148. package/dist/models/index.d.ts.map +1 -1
  149. package/dist/money-rational.d.ts +15 -0
  150. package/dist/money-rational.d.ts.map +1 -0
  151. package/dist/money.d.ts +106 -25
  152. package/dist/money.d.ts.map +1 -1
  153. package/dist/money.js +274 -0
  154. package/dist/money.js.map +1 -0
  155. package/dist/recipes.d.ts +17 -47
  156. package/dist/recipes.d.ts.map +1 -1
  157. package/dist/revenue-journal.d.ts +61 -0
  158. package/dist/revenue-journal.d.ts.map +1 -0
  159. package/dist/smrt-knowledge.json +6558 -1316
  160. package/dist/svelte/components/InvoiceActions.svelte +12 -0
  161. package/dist/svelte/components/InvoiceActions.svelte.d.ts +5 -0
  162. package/dist/svelte/components/InvoiceActions.svelte.d.ts.map +1 -1
  163. package/dist/svelte/components/InvoiceEditor.svelte +15 -1
  164. package/dist/svelte/components/InvoiceEditor.svelte.d.ts.map +1 -1
  165. package/dist/svelte/components/InvoiceLineItems.svelte +3 -3
  166. package/dist/svelte/components/InvoiceRecordScreen.svelte +94 -0
  167. package/dist/svelte/components/InvoiceRecordScreen.svelte.d.ts +21 -0
  168. package/dist/svelte/components/InvoiceRecordScreen.svelte.d.ts.map +1 -0
  169. package/dist/svelte/components/InvoiceTotals.svelte +2 -2
  170. package/dist/svelte/components/MoneyInvoiceEditor.svelte +282 -0
  171. package/dist/svelte/components/MoneyInvoiceEditor.svelte.d.ts +31 -0
  172. package/dist/svelte/components/MoneyInvoiceEditor.svelte.d.ts.map +1 -0
  173. package/dist/svelte/components/PurchaseOrderEditor.svelte +53 -1
  174. package/dist/svelte/components/PurchaseOrderEditor.svelte.d.ts +5 -0
  175. package/dist/svelte/components/PurchaseOrderEditor.svelte.d.ts.map +1 -1
  176. package/dist/svelte/components/QuoteEditor.svelte +54 -1
  177. package/dist/svelte/components/QuoteEditor.svelte.d.ts +5 -0
  178. package/dist/svelte/components/QuoteEditor.svelte.d.ts.map +1 -1
  179. package/dist/svelte/i18n.d.ts +16 -0
  180. package/dist/svelte/i18n.d.ts.map +1 -1
  181. package/dist/svelte/i18n.js +16 -0
  182. package/dist/svelte/index.d.ts +7 -2
  183. package/dist/svelte/index.d.ts.map +1 -1
  184. package/dist/svelte/index.js +4 -1
  185. package/dist/svelte/invoices/calculations.d.ts +7 -2
  186. package/dist/svelte/invoices/calculations.d.ts.map +1 -1
  187. package/dist/svelte/invoices/calculations.js +141 -47
  188. package/dist/svelte/invoices/money-editor.d.ts +123 -0
  189. package/dist/svelte/invoices/money-editor.d.ts.map +1 -0
  190. package/dist/svelte/invoices/money-editor.js +101 -0
  191. package/dist/svelte/invoices/types.d.ts +5 -1
  192. package/dist/svelte/invoices/types.d.ts.map +1 -1
  193. package/dist/svelte/purchasing-i18n.d.ts +5 -0
  194. package/dist/svelte/purchasing-i18n.d.ts.map +1 -1
  195. package/dist/svelte/purchasing-i18n.js +5 -0
  196. package/dist/svelte/quote-i18n.d.ts +5 -0
  197. package/dist/svelte/quote-i18n.d.ts.map +1 -1
  198. package/dist/svelte/quote-i18n.js +5 -0
  199. package/dist/tax/cookbook.d.ts +22 -0
  200. package/dist/tax/cookbook.d.ts.map +1 -0
  201. package/dist/tax/example-pack.d.ts +25 -0
  202. package/dist/tax/example-pack.d.ts.map +1 -0
  203. package/dist/tax/identity.d.ts +5 -0
  204. package/dist/tax/identity.d.ts.map +1 -0
  205. package/dist/tax/index.d.ts +4 -0
  206. package/dist/tax/index.d.ts.map +1 -0
  207. package/dist/tax/legacy.d.ts +48 -0
  208. package/dist/tax/legacy.d.ts.map +1 -0
  209. package/dist/tax-summary-report-adapter.d.ts +37 -0
  210. package/dist/tax-summary-report-adapter.d.ts.map +1 -0
  211. package/dist/tax-summary.d.ts +129 -0
  212. package/dist/tax-summary.d.ts.map +1 -0
  213. package/dist/tenant-money-barrier.d.ts +66 -0
  214. package/dist/tenant-money-barrier.d.ts.map +1 -0
  215. package/dist/types/index.d.ts +145 -5
  216. package/dist/types/index.d.ts.map +1 -1
  217. package/package.json +19 -11
  218. package/dist/chunks/calculations-Bz7RB3qK.js.map +0 -1
  219. package/dist/chunks/money-DfrRxrel.js.map +0 -1
  220. package/dist/chunks/types-zVnIjSOk.js.map +0 -1
@@ -11,6 +11,7 @@ import { useI18n } from '@happyvertical/smrt-ui/i18n';
11
11
  import { Button } from '@happyvertical/smrt-ui/ui';
12
12
  import type { Snippet } from 'svelte';
13
13
  import type { HTMLFormAttributes } from 'svelte/elements';
14
+ import type { MoneyHeaderDisplay } from '../invoices/money-editor.js';
14
15
  import { P } from '../purchasing-i18n.js';
15
16
  import {
16
17
  type PurchaseDraftValues,
@@ -78,6 +79,10 @@ export interface Props {
78
79
  extensions?: Snippet;
79
80
  /** Authorized private attachment surface outside the editor form; never loaded by Commerce. */
80
81
  attachments?: Snippet;
82
+ /** Explicit v2 stored header facts; no totals are recomputed in this surface. */
83
+ money?: MoneyHeaderDisplay;
84
+ /** Native field name for the explicit document mode. */
85
+ moneyFieldName?: string;
81
86
  }
82
87
  let {
83
88
  operation = 'create',
@@ -109,9 +114,16 @@ let {
109
114
  formAttributes = {},
110
115
  extensions,
111
116
  attachments,
117
+ money: moneyDisplay,
118
+ moneyFieldName = 'lineAmountType',
112
119
  }: Props = $props();
113
120
  const { t } = useI18n();
114
121
  const fields = $derived({ ...purchaseFieldNames, ...names });
122
+ function normalizedMoneyText(value: string): string | null {
123
+ if (!/^\d+(?:\.\d+)?$/u.test(value)) return null;
124
+ const [whole, fraction = ''] = value.split('.');
125
+ return `${whole.replace(/^0+(?=\d)/u, '') || '0'}.${fraction.replace(/0+$/u, '') || '0'}`;
126
+ }
115
127
  const title = $derived(
116
128
  labels.title ??
117
129
  t(
@@ -136,6 +148,44 @@ function displayMoney(value: QuoteMoneyMinor): string {
136
148
  }
137
149
  const money = (amountMinor: number | null) =>
138
150
  displayMoney({ currency, minorUnitDigits, amountMinor });
151
+ function lineAmountTypeText(
152
+ lineAmountType: MoneyHeaderDisplay['lineAmountType'],
153
+ ): string {
154
+ return t(
155
+ P[
156
+ lineAmountType === 'inclusive'
157
+ ? 'commerce.purchase.tax_inclusive'
158
+ : lineAmountType === 'exclusive'
159
+ ? 'commerce.purchase.tax_exclusive'
160
+ : 'commerce.purchase.no_tax'
161
+ ],
162
+ );
163
+ }
164
+ function calculatedTaxError(
165
+ enteredTax: string,
166
+ hasLines: boolean,
167
+ header: MoneyHeaderDisplay | undefined,
168
+ headerCurrency: string,
169
+ ): string | undefined {
170
+ if (!header || !hasLines) return undefined;
171
+ const calculatedTax = quoteMinorText({
172
+ currency: headerCurrency,
173
+ minorUnitDigits: header.minorUnitDigits,
174
+ amountMinor: header.taxMinor,
175
+ });
176
+ return normalizedMoneyText(enteredTax) ===
177
+ normalizedMoneyText(calculatedTax ?? '')
178
+ ? undefined
179
+ : 'Tax must match calculated line tax.';
180
+ }
181
+ const moneyTaxError = $derived.by(() =>
182
+ calculatedTaxError(
183
+ values.tax,
184
+ values.allocations.length > 0,
185
+ moneyDisplay,
186
+ currency,
187
+ ),
188
+ );
139
189
  </script>
140
190
  <section class="purchase-editor" aria-label={title} data-smrt-component="PurchaseOrderEditor">
141
191
  <h2>{title}</h2>
@@ -144,9 +194,11 @@ const money = (amountMinor: number | null) =>
144
194
  {#if source.notice}<p role="status">{source.notice}</p>{/if}
145
195
  {#if operation==='reduce'}<p>{t(P['commerce.purchase.reduction_hint'])}</p>{/if}
146
196
  {#if readonly}<p>{t(P['commerce.purchase.readonly'])}</p>{/if}
197
+ {#if moneyDisplay}<p>{t(P['commerce.purchase.money_amounts_are'], { amountType: lineAmountTypeText(moneyDisplay.lineAmountType) })}</p>{#if moneyDisplay.lineAmountType === 'inclusive' && moneyDisplay.taxMinor !== 0}<p>{t(P['commerce.purchase.money_includes_tax'], { amount: displayMoney({currency, minorUnitDigits: moneyDisplay.minorUnitDigits, amountMinor: moneyDisplay.taxMinor}), currency })}</p>{/if}{/if}
147
198
  {#if message}<p role="alert">{message}</p>{/if}
148
199
  <Form {...formAttributes} {action} method="post" {onsubmit} preventDefault={false}>
149
200
  {#each hiddenFields as field}<Input type="hidden" name={field.name} value={field.value} />{/each}
201
+ {#if moneyDisplay}<Input type="hidden" name={moneyFieldName} value={moneyDisplay.lineAmountType} />{/if}
150
202
  <fieldset disabled={readonly || busy || source.disabled}>
151
203
  <legend>{title}</legend>
152
204
  <!-- The first submitter is the safe default for native Enter-in-input submission. -->
@@ -174,7 +226,7 @@ const money = (amountMinor: number | null) =>
174
226
  {:else}<p>{t(P['commerce.purchase.empty_allocations'])}</p>{/each}
175
227
  {#if rowActions && !readonly}<Button type="submit" name={intents.name} value={rowActions.add} formnovalidate variant="secondary" density="touch">{t(P['commerce.purchase.add'])}</Button>{/if}
176
228
  </fieldset>
177
- <FormGroup label={`${t(P['commerce.purchase.tax'])} (${currency})`} error={errors.tax} required><Input name={fields.tax} value={values.tax} inputmode="decimal" required density="touch" /></FormGroup>
229
+ <FormGroup label={`${t(P['commerce.purchase.tax'])} (${currency})`} error={errors.tax ?? moneyTaxError} required><Input name={fields.tax} value={values.tax} inputmode="decimal" required density="touch" /></FormGroup>
178
230
  {#each [{key:'scope',label:'commerce.purchase.scope'}, {key:'inclusions',label:'commerce.purchase.inclusions'}, {key:'exclusions',label:'commerce.purchase.exclusions'}, {key:'reason',label:'commerce.purchase.reason'}] as field}
179
231
  <FormGroup label={t(P[field.label as keyof typeof P])} error={errors[field.key]} required={field.key==='scope' || field.key==='reason'}><Textarea name={fields[field.key as keyof PurchaseFieldNames]} value={values[field.key as 'scope']} required={field.key==='scope' || field.key==='reason'} /></FormGroup>
180
232
  {/each}
@@ -1,5 +1,6 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLFormAttributes } from 'svelte/elements';
3
+ import type { MoneyHeaderDisplay } from '../invoices/money-editor.js';
3
4
  import { type PurchaseDraftValues, type PurchaseFieldNames, type PurchaseReviewSnapshot, type PurchaseSourceOption } from '../purchasing-types.js';
4
5
  import type { QuoteFormAttributes } from './QuoteEditor.svelte';
5
6
  /** Native purchase/award preparation, review and explicit confirmation; never writes a record. */
@@ -72,6 +73,10 @@ export interface Props {
72
73
  extensions?: Snippet;
73
74
  /** Authorized private attachment surface outside the editor form; never loaded by Commerce. */
74
75
  attachments?: Snippet;
76
+ /** Explicit v2 stored header facts; no totals are recomputed in this surface. */
77
+ money?: MoneyHeaderDisplay;
78
+ /** Native field name for the explicit document mode. */
79
+ moneyFieldName?: string;
75
80
  }
76
81
  declare const PurchaseOrderEditor: import("svelte").Component<Props, {}, "">;
77
82
  type PurchaseOrderEditor = ReturnType<typeof PurchaseOrderEditor>;
@@ -1 +1 @@
1
- {"version":3,"file":"PurchaseOrderEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/PurchaseOrderEditor.svelte.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAE1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,kGAAkG;AAClG,MAAM,WAAW,KAAK;IACpB,gFAAgF;IAChF,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1C,4FAA4F;IAC5F,MAAM,EAAE,oBAAoB,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,6EAA6E;IAC7E,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,uEAAuE;IACvE,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC1C,yEAAyE;IACzE,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,yEAAyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+FAA+F;IAC/F,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0ID,QAAA,MAAM,mBAAmB,2CAAwC,CAAC;AAClE,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAClE,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"PurchaseOrderEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/PurchaseOrderEditor.svelte.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,14 @@ import { Button } from '@happyvertical/smrt-ui/ui';
13
13
  import type { Snippet } from 'svelte';
14
14
  import type { Attachment } from 'svelte/attachments';
15
15
  import type { HTMLFormAttributes } from 'svelte/elements';
16
+ import type { MoneyHeaderDisplay } from '../invoices/money-editor.js';
16
17
  import { Q } from '../quote-i18n.js';
17
18
  import {
18
19
  type QuoteDocumentKind,
19
20
  type QuoteDraftValues,
20
21
  type QuoteFieldNames,
21
22
  quoteFieldNames,
23
+ quoteMinorText,
22
24
  } from '../quote-types.js';
23
25
 
24
26
  /** Narrow native attributes and Svelte attachment keys; avoids recursive HTML prop unions. */
@@ -73,6 +75,10 @@ export interface Props {
73
75
  extensions?: Snippet;
74
76
  /** Authorized attachment composition; this component never loads private files. */
75
77
  attachments?: Snippet;
78
+ /** Explicit v2 stored header facts; this editor never recomputes them. */
79
+ money?: MoneyHeaderDisplay;
80
+ /** Native field name for the explicit document mode. */
81
+ moneyFieldName?: string;
76
82
  }
77
83
  let {
78
84
  kind,
@@ -99,10 +105,55 @@ let {
99
105
  formAttributes = {},
100
106
  extensions,
101
107
  attachments,
108
+ money,
109
+ moneyFieldName = 'lineAmountType',
102
110
  }: Props = $props();
103
111
  const i18n = useI18n();
104
112
  const { t } = i18n;
105
113
  const fields = $derived({ ...quoteFieldNames, ...names });
114
+ function lineAmountTypeText(
115
+ lineAmountType: MoneyHeaderDisplay['lineAmountType'],
116
+ ): string {
117
+ return t(
118
+ Q[
119
+ lineAmountType === 'inclusive'
120
+ ? 'commerce.quote.tax_inclusive'
121
+ : lineAmountType === 'exclusive'
122
+ ? 'commerce.quote.tax_exclusive'
123
+ : 'commerce.quote.no_tax'
124
+ ],
125
+ );
126
+ }
127
+ function normalizedMoneyText(value: string): string | null {
128
+ if (!/^\d+(?:\.\d+)?$/u.test(value)) return null;
129
+ const [whole, fraction = ''] = value.split('.');
130
+ return `${whole.replace(/^0+(?=\d)/u, '') || '0'}.${fraction.replace(/0+$/u, '') || '0'}`;
131
+ }
132
+ function calculatedTaxError(
133
+ enteredTax: string,
134
+ hasLines: boolean,
135
+ header: MoneyHeaderDisplay | undefined,
136
+ headerCurrency: string,
137
+ ): string | undefined {
138
+ if (!header || !hasLines) return undefined;
139
+ const calculatedTax = quoteMinorText({
140
+ currency: headerCurrency,
141
+ minorUnitDigits: header.minorUnitDigits,
142
+ amountMinor: header.taxMinor,
143
+ });
144
+ return normalizedMoneyText(enteredTax) ===
145
+ normalizedMoneyText(calculatedTax ?? '')
146
+ ? undefined
147
+ : 'Tax must match calculated line tax.';
148
+ }
149
+ const moneyTaxError = $derived.by(() =>
150
+ calculatedTaxError(
151
+ values.tax,
152
+ values.lines.length > 0,
153
+ money,
154
+ values.currency,
155
+ ),
156
+ );
106
157
  const title = $derived(
107
158
  labels.title ??
108
159
  t(
@@ -118,10 +169,12 @@ const title = $derived(
118
169
  <section class="quote-editor" aria-label={title} data-smrt-component="QuoteEditor">
119
170
  <h2>{title}</h2>
120
171
  <p>{t(Q[kind === 'vendor-quotation' ? 'commerce.quote.vendor_hint' : 'commerce.quote.estimate_hint'])}</p>
172
+ {#if money}<p>{t(Q['commerce.quote.money_amounts_are'], { amountType: lineAmountTypeText(money.lineAmountType) })}</p>{#if money.lineAmountType === 'inclusive' && money.taxMinor !== 0}<p>{t(Q['commerce.quote.money_includes_tax'], { amount: quoteMinorText({currency: values.currency, minorUnitDigits: money.minorUnitDigits, amountMinor: money.taxMinor}) })}</p>{/if}{/if}
121
173
  {#if readonly}<p>{t(Q['commerce.quote.readonly'])}</p>{/if}
122
174
  {#if message}<p role="alert">{message}</p>{/if}
123
175
  <Form {...formAttributes} {action} {method} {onsubmit} preventDefault={false}>
124
176
  {#each hiddenFields as field}<Input type="hidden" name={field.name} value={field.value} />{/each}
177
+ {#if money}<Input type="hidden" name={moneyFieldName} value={money.lineAmountType} />{/if}
125
178
  <fieldset disabled={readonly || busy}>
126
179
  <legend>{title}</legend>
127
180
  {#if !readonly}<div class="actions"><Button type="submit" name={intents.name} value={intents.save} density="touch">{labels.save ?? t(Q['commerce.quote.save'])}</Button></div>{/if}
@@ -133,7 +186,7 @@ const title = $derived(
133
186
  </Select>
134
187
  </FormGroup>
135
188
  {#each [{key:'reference',label:'commerce.quote.reference'}, {key:'date',label:'commerce.quote.date'}, {key:'validUntil',label:'commerce.quote.expiry'}, {key:'currency',label:'commerce.quote.currency'}, {key:'total',label:'commerce.quote.total'}, {key:'tax',label:'commerce.quote.tax'}] as field}
136
- <FormGroup label={t(Q[field.label as keyof typeof Q])} error={errors[field.key]}>
189
+ <FormGroup label={t(Q[field.label as keyof typeof Q])} error={field.key === 'tax' ? errors.tax ?? moneyTaxError : errors[field.key]}>
137
190
  {#if field.key === 'currency'}
138
191
  <CurrencySelect name={fields.currency} value={values.currency} options={currencyOptions} locale={i18n.locale} readOnly={readonly} disabled={busy} density="touch" />
139
192
  {:else}
@@ -2,6 +2,7 @@ import type { CodeSelectOption } from '@happyvertical/smrt-ui/forms';
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { Attachment } from 'svelte/attachments';
4
4
  import type { HTMLFormAttributes } from 'svelte/elements';
5
+ import type { MoneyHeaderDisplay } from '../invoices/money-editor.js';
5
6
  import { type QuoteDocumentKind, type QuoteDraftValues, type QuoteFieldNames } from '../quote-types.js';
6
7
  /** Narrow native attributes and Svelte attachment keys; avoids recursive HTML prop unions. */
7
8
  export interface QuoteFormAttributes {
@@ -69,6 +70,10 @@ export interface Props {
69
70
  extensions?: Snippet;
70
71
  /** Authorized attachment composition; this component never loads private files. */
71
72
  attachments?: Snippet;
73
+ /** Explicit v2 stored header facts; this editor never recomputes them. */
74
+ money?: MoneyHeaderDisplay;
75
+ /** Native field name for the explicit document mode. */
76
+ moneyFieldName?: string;
72
77
  }
73
78
  declare const QuoteEditor: import("svelte").Component<Props, {}, "">;
74
79
  type QuoteEditor = ReturnType<typeof QuoteEditor>;
@@ -1 +1 @@
1
- {"version":3,"file":"QuoteEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/QuoteEditor.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAWrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAG3B,8FAA8F;AAC9F,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxC,mCAAmC;IACnC,YAAY,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAClD,wEAAwE;IACxE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;CAC5C;AAED,2FAA2F;AAC3F,MAAM,WAAW,KAAK;IACpB,uCAAuC;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,gEAAgE;IAChE,MAAM,EAAE,gBAAgB,CAAC;IACzB,2CAA2C;IAC3C,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,mFAAmF;IACnF,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mFAAmF;IACnF,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,oDAAoD;IACpD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,gFAAgF;IAChF,eAAe,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC1C,+FAA+F;IAC/F,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAgHD,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"QuoteEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/QuoteEditor.svelte.ts"],"names":[],"mappings":"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"}
@@ -113,16 +113,32 @@ export declare const M: {
113
113
  readonly 'commerce.select.clear': "commerce.select.clear";
114
114
  readonly 'commerce.invoice_actions.send_invoice': "commerce.invoice_actions.send_invoice";
115
115
  readonly 'commerce.invoice_actions.mark_as_paid': "commerce.invoice_actions.mark_as_paid";
116
+ readonly 'commerce.invoice_actions.create_credit_note': "commerce.invoice_actions.create_credit_note";
116
117
  readonly 'commerce.invoice_header.issue_date': "commerce.invoice_header.issue_date";
117
118
  readonly 'commerce.invoice_header.due_date': "commerce.invoice_header.due_date";
118
119
  readonly 'commerce.invoice_header.paid_date': "commerce.invoice_header.paid_date";
119
120
  readonly 'commerce.invoice_line_items.add_item': "commerce.invoice_line_items.add_item";
120
121
  readonly 'commerce.invoice_line_items.unit_price': "commerce.invoice_line_items.unit_price";
122
+ readonly 'commerce.invoice_line_items.line_total': "commerce.invoice_line_items.line_total";
121
123
  readonly 'commerce.invoice_line_items.remove_item': "commerce.invoice_line_items.remove_item";
122
124
  readonly 'commerce.invoice_totals.amount_paid': "commerce.invoice_totals.amount_paid";
123
125
  readonly 'commerce.invoice_totals.balance_due': "commerce.invoice_totals.balance_due";
124
126
  readonly 'commerce.invoice_totals.credit': "commerce.invoice_totals.credit";
125
127
  readonly 'commerce.invoice_totals.paid_in_full': "commerce.invoice_totals.paid_in_full";
128
+ readonly 'commerce.invoice_record.credit_notes': "commerce.invoice_record.credit_notes";
129
+ readonly 'commerce.invoice_money.aria_label': "commerce.invoice_money.aria_label";
130
+ readonly 'commerce.invoice_money.amounts_are': "commerce.invoice_money.amounts_are";
131
+ readonly 'commerce.invoice_money.tax_exclusive': "commerce.invoice_money.tax_exclusive";
132
+ readonly 'commerce.invoice_money.tax_inclusive': "commerce.invoice_money.tax_inclusive";
133
+ readonly 'commerce.invoice_money.no_tax': "commerce.invoice_money.no_tax";
134
+ readonly 'commerce.invoice_money.exempt_inclusive': "commerce.invoice_money.exempt_inclusive";
135
+ readonly 'commerce.invoice_money.line': "commerce.invoice_money.line";
136
+ readonly 'commerce.invoice_money.unit_price': "commerce.invoice_money.unit_price";
137
+ readonly 'commerce.invoice_money.discount_type': "commerce.invoice_money.discount_type";
138
+ readonly 'commerce.invoice_money.tax_code': "commerce.invoice_money.tax_code";
139
+ readonly 'commerce.invoice_money.exempt_override': "commerce.invoice_money.exempt_override";
140
+ readonly 'commerce.invoice_money.includes_discounts': "commerce.invoice_money.includes_discounts";
141
+ readonly 'commerce.invoice_money.rounded_document': "commerce.invoice_money.rounded_document";
126
142
  readonly 'commerce.unbilled_items.select_all': "commerce.unbilled_items.select_all";
127
143
  readonly 'commerce.unbilled_items.selected_count': "commerce.unbilled_items.selected_count";
128
144
  readonly 'commerce.unbilled_items.selected_total': "commerce.unbilled_items.selected_total";
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqIZ,CAAC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuJZ,CAAC"}
@@ -114,16 +114,32 @@ export const M = defineMessages({
114
114
  'commerce.select.clear': 'Clear {label}',
115
115
  'commerce.invoice_actions.send_invoice': 'Send Invoice',
116
116
  'commerce.invoice_actions.mark_as_paid': 'Mark as Paid',
117
+ 'commerce.invoice_actions.create_credit_note': 'Create credit note',
117
118
  'commerce.invoice_header.issue_date': 'Issue Date',
118
119
  'commerce.invoice_header.due_date': 'Due Date',
119
120
  'commerce.invoice_header.paid_date': 'Paid Date',
120
121
  'commerce.invoice_line_items.add_item': 'Add Item',
121
122
  'commerce.invoice_line_items.unit_price': 'Unit Price',
123
+ 'commerce.invoice_line_items.line_total': 'Line total',
122
124
  'commerce.invoice_line_items.remove_item': 'Remove item',
123
125
  'commerce.invoice_totals.amount_paid': 'Amount Paid',
124
126
  'commerce.invoice_totals.balance_due': 'Balance Due',
125
127
  'commerce.invoice_totals.credit': 'Credit',
126
128
  'commerce.invoice_totals.paid_in_full': 'Paid in Full',
129
+ 'commerce.invoice_record.credit_notes': 'Credit notes',
130
+ 'commerce.invoice_money.aria_label': 'Invoice money',
131
+ 'commerce.invoice_money.amounts_are': 'Amounts are',
132
+ 'commerce.invoice_money.tax_exclusive': 'Tax exclusive',
133
+ 'commerce.invoice_money.tax_inclusive': 'Tax inclusive',
134
+ 'commerce.invoice_money.no_tax': 'No tax',
135
+ 'commerce.invoice_money.exempt_inclusive': 'Customer is exempt: prices unchanged, no tax extracted.',
136
+ 'commerce.invoice_money.line': 'Invoice line {number}',
137
+ 'commerce.invoice_money.unit_price': 'Unit price',
138
+ 'commerce.invoice_money.discount_type': 'Discount type',
139
+ 'commerce.invoice_money.tax_code': 'Tax code',
140
+ 'commerce.invoice_money.exempt_override': 'Customer is exempt; this line is taxed by override.',
141
+ 'commerce.invoice_money.includes_discounts': 'Includes discounts of',
142
+ 'commerce.invoice_money.rounded_document': 'Rounded per document',
127
143
  'commerce.unbilled_items.select_all': 'Select All',
128
144
  'commerce.unbilled_items.selected_count': '{selected} of {total} selected',
129
145
  'commerce.unbilled_items.selected_total': 'Selected Total:',
@@ -26,6 +26,7 @@ import InvoiceActions from './components/InvoiceActions.svelte';
26
26
  import InvoiceCard from './components/InvoiceCard.svelte';
27
27
  import InvoiceHeader from './components/InvoiceHeader.svelte';
28
28
  import InvoiceLineItems from './components/InvoiceLineItems.svelte';
29
+ import type InvoiceRecordScreen from './components/InvoiceRecordScreen.svelte';
29
30
  import InvoiceTotals from './components/InvoiceTotals.svelte';
30
31
  import PartyContactFields from './components/PartyContactFields.svelte';
31
32
  import UnbilledItems from './components/UnbilledItems.svelte';
@@ -51,6 +52,8 @@ export type InvoiceHeaderProps = ComponentProps<typeof InvoiceHeader>;
51
52
  export { default as InvoiceHeader } from './components/InvoiceHeader.svelte';
52
53
  export type InvoiceLineItemsProps = ComponentProps<typeof InvoiceLineItems>;
53
54
  export { default as InvoiceLineItems } from './components/InvoiceLineItems.svelte';
55
+ export type InvoiceRecordScreenProps = ComponentProps<typeof InvoiceRecordScreen>;
56
+ export { default as InvoiceRecordScreen } from './components/InvoiceRecordScreen.svelte';
54
57
  export type InvoiceTotalsProps = ComponentProps<typeof InvoiceTotals>;
55
58
  export { default as InvoiceTotals } from './components/InvoiceTotals.svelte';
56
59
  export type UnbilledItemsProps = ComponentProps<typeof UnbilledItems>;
@@ -87,9 +90,11 @@ import InvoiceAllocationFields from './components/InvoiceAllocationFields.svelte
87
90
  import InvoiceEditor from './components/InvoiceEditor.svelte';
88
91
  import InvoiceLineEditor from './components/InvoiceLineEditor.svelte';
89
92
  import InvoiceReview from './components/InvoiceReview.svelte';
90
- export { InvoiceAllocationFields, InvoiceEditor, InvoiceLineEditor, InvoiceReview, };
93
+ import MoneyInvoiceEditor from './components/MoneyInvoiceEditor.svelte';
94
+ export { InvoiceAllocationFields, InvoiceEditor, InvoiceLineEditor, InvoiceReview, MoneyInvoiceEditor, };
91
95
  export type InvoiceReviewProps = ComponentProps<typeof InvoiceReview>;
92
- export type { InvoiceAllocationDraft, InvoiceAllocationFieldsProps, InvoiceDraftValues, InvoiceEditorProps, InvoiceFieldNames, InvoiceLineDraft, InvoiceLineEditorProps, InvoiceLineFieldNames, InvoicePreparationFields, InvoicePreparationHiddenField, InvoicePreparationReview, InvoicePreparationSource, } from './invoices/types.js';
96
+ export { calculateMoneyEditorDraft, moneyEditorFieldNames, moneyEditorSubmission, } from './invoices/money-editor.js';
97
+ export type { InvoiceAllocationDraft, InvoiceAllocationFieldsProps, InvoiceDraftValues, InvoiceEditorProps, InvoiceFieldNames, InvoiceLineDraft, InvoiceLineEditorProps, InvoiceLineFieldNames, InvoicePreparationFields, InvoicePreparationHiddenField, InvoicePreparationReview, InvoicePreparationSource, MoneyEditorDraft, MoneyEditorFieldNames, MoneyEditorLineDraft, MoneyEditorProps, MoneyEditorTaxCode, MoneyStoredDocument, MoneyStoredTax, } from './invoices/types.js';
93
98
  import PurchaseOrderEditor from './components/PurchaseOrderEditor.svelte';
94
99
  import PurchaseSourceSelector from './components/PurchaseSourceSelector.svelte';
95
100
  export { PurchaseOrderEditor, PurchaseSourceSelector };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,7 @@ export { default as InvoiceActions } from './components/InvoiceActions.svelte';
45
45
  export { default as InvoiceCard } from './components/InvoiceCard.svelte';
46
46
  export { default as InvoiceHeader } from './components/InvoiceHeader.svelte';
47
47
  export { default as InvoiceLineItems } from './components/InvoiceLineItems.svelte';
48
+ export { default as InvoiceRecordScreen } from './components/InvoiceRecordScreen.svelte';
48
49
  export { default as InvoiceTotals } from './components/InvoiceTotals.svelte';
49
50
  export { default as UnbilledItems } from './components/UnbilledItems.svelte';
50
51
  export { default as PartyContactFields } from './components/PartyContactFields.svelte';
@@ -86,7 +87,9 @@ import InvoiceAllocationFields from './components/InvoiceAllocationFields.svelte
86
87
  import InvoiceEditor from './components/InvoiceEditor.svelte';
87
88
  import InvoiceLineEditor from './components/InvoiceLineEditor.svelte';
88
89
  import InvoiceReview from './components/InvoiceReview.svelte';
89
- export { InvoiceAllocationFields, InvoiceEditor, InvoiceLineEditor, InvoiceReview, };
90
+ import MoneyInvoiceEditor from './components/MoneyInvoiceEditor.svelte';
91
+ export { InvoiceAllocationFields, InvoiceEditor, InvoiceLineEditor, InvoiceReview, MoneyInvoiceEditor, };
92
+ export { calculateMoneyEditorDraft, moneyEditorFieldNames, moneyEditorSubmission, } from './invoices/money-editor.js';
90
93
  ModuleUIRegistry.register('@happyvertical/smrt-commerce', 'invoice-editor', InvoiceEditor);
91
94
  ModuleUIRegistry.register('@happyvertical/smrt-commerce', 'invoice-review', InvoiceReview);
92
95
  import PurchaseOrderEditor from './components/PurchaseOrderEditor.svelte';
@@ -94,16 +94,21 @@ export interface InvoiceMinorLineInput {
94
94
  quantity: number;
95
95
  /** Signed integer minor units; negative prices support existing credit lines. */
96
96
  unitPrice: number;
97
- /** Nonnegative flat discount in integer minor units. */
97
+ /** Legacy uses a nonnegative flat discount; v2 stores the gross sign. */
98
98
  discount: number;
99
99
  /** Resolved tax fraction, at most eight fractional digits, in [0, 1]. */
100
100
  taxRate: number;
101
101
  }
102
+ /** Explicit migration boundary for persisted legacy invoice-line arithmetic. */
103
+ export interface InvoiceMinorLineCalculationOptions {
104
+ /** Existing callers remain legacy until #3933's per-tenant marker selects v2. */
105
+ moneyModel?: 'legacy' | 'v2';
106
+ }
102
107
  /**
103
108
  * Exact model calculation, including existing negative-price credit lines.
104
109
  * Throws before persistence for unsafe money, invalid quantity, or invalid tax.
105
110
  */
106
- export declare function calculateInvoiceMinorLine(input: InvoiceMinorLineInput): InvoiceCalculatedAmounts;
111
+ export declare function calculateInvoiceMinorLine(input: InvoiceMinorLineInput, options?: InvoiceMinorLineCalculationOptions): InvoiceCalculatedAmounts;
107
112
  /** Validated line fields suitable for the existing model's resolved money columns. */
108
113
  export interface InvoiceResolvedLine extends InvoiceMinorLineInput {
109
114
  /** Validated item description. */
@@ -1 +1 @@
1
- {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/svelte/invoices/calculations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/svelte/invoices/calculations.ts"],"names":[],"mappings":"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"}