@voyant-travel/finance 0.167.0 → 0.168.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/README.md +23 -9
  2. package/dist/action-ledger-drift.d.ts.map +1 -0
  3. package/dist/booking-lifecycle.d.ts.map +1 -0
  4. package/dist/booking-schedule/subscriber-runtime.d.ts.map +1 -0
  5. package/dist/booking-tax.d.ts +31 -19
  6. package/dist/booking-tax.d.ts.map +1 -0
  7. package/dist/booking-tax.js +48 -15
  8. package/dist/card-payment.d.ts.map +1 -0
  9. package/dist/checkout-routes.d.ts +294 -294
  10. package/dist/checkout-routes.d.ts.map +1 -0
  11. package/dist/checkout-service-plan.d.ts +2 -2
  12. package/dist/checkout-service-plan.d.ts.map +1 -0
  13. package/dist/checkout-service.d.ts.map +1 -0
  14. package/dist/checkout-validation.d.ts.map +1 -0
  15. package/dist/document-download.d.ts.map +1 -0
  16. package/dist/fx-money.d.ts.map +1 -0
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +3 -3
  20. package/dist/invoice-fx.d.ts.map +1 -0
  21. package/dist/invoice-number-errors.d.ts.map +1 -0
  22. package/dist/linkables.d.ts.map +1 -0
  23. package/dist/markets-ref.d.ts.map +1 -0
  24. package/dist/mcp-runtime.d.ts.map +1 -0
  25. package/dist/order-payment-sessions.d.ts.map +1 -0
  26. package/dist/payment-adapter-events.d.ts +3 -3
  27. package/dist/payment-link.d.ts.map +1 -0
  28. package/dist/payment-policy-cascade.d.ts.map +1 -0
  29. package/dist/payment-policy.d.ts.map +1 -0
  30. package/dist/payment-schedule/routes.d.ts +2 -2
  31. package/dist/payment-schedule/routes.d.ts.map +1 -0
  32. package/dist/route-runtime.d.ts.map +1 -0
  33. package/dist/routes-action-ledger.d.ts +25 -25
  34. package/dist/routes-action-ledger.d.ts.map +1 -0
  35. package/dist/routes-booking-billing.d.ts +95 -95
  36. package/dist/routes-booking-billing.d.ts.map +1 -0
  37. package/dist/routes-booking-create.d.ts.map +1 -0
  38. package/dist/routes-booking-reads.d.ts +13 -13
  39. package/dist/routes-booking-reads.d.ts.map +1 -0
  40. package/dist/routes-documents.d.ts +11 -11
  41. package/dist/routes-documents.d.ts.map +1 -0
  42. package/dist/routes-invoice-core.d.ts +87 -87
  43. package/dist/routes-invoice-core.d.ts.map +1 -0
  44. package/dist/routes-invoice-documents.d.ts +16 -16
  45. package/dist/routes-invoice-documents.d.ts.map +1 -0
  46. package/dist/routes-invoice-issue.d.ts.map +1 -0
  47. package/dist/routes-invoice-schemas.d.ts +20 -20
  48. package/dist/routes-invoice-schemas.d.ts.map +1 -0
  49. package/dist/routes-payment-processing.d.ts +152 -152
  50. package/dist/routes-payment-processing.d.ts.map +1 -0
  51. package/dist/routes-payment-schemas.d.ts +17 -17
  52. package/dist/routes-payment-schemas.d.ts.map +1 -0
  53. package/dist/routes-payments.d.ts +64 -64
  54. package/dist/routes-payments.d.ts.map +1 -0
  55. package/dist/routes-public-accountant.d.ts +19 -19
  56. package/dist/routes-public.d.ts +102 -102
  57. package/dist/routes-public.d.ts.map +1 -0
  58. package/dist/routes-reference-data.d.ts +33 -33
  59. package/dist/routes-reference-data.d.ts.map +1 -0
  60. package/dist/routes-reports.d.ts +11 -11
  61. package/dist/routes-reports.d.ts.map +1 -0
  62. package/dist/routes-runtime.d.ts +1 -1
  63. package/dist/routes-runtime.d.ts.map +1 -0
  64. package/dist/routes-settlement.d.ts +12 -12
  65. package/dist/routes-settlement.d.ts.map +1 -0
  66. package/dist/routes-shared.d.ts.map +1 -0
  67. package/dist/routes-supplier-invoices.d.ts +75 -75
  68. package/dist/routes-supplier-invoices.d.ts.map +1 -0
  69. package/dist/routes-travel-credits.d.ts +4 -4
  70. package/dist/routes-vouchers.d.ts +401 -0
  71. package/dist/routes-vouchers.d.ts.map +1 -0
  72. package/dist/routes-vouchers.js +176 -0
  73. package/dist/routes.d.ts +477 -477
  74. package/dist/routes.d.ts.map +1 -0
  75. package/dist/runtime-contributor.d.ts.map +1 -0
  76. package/dist/runtime-port.d.ts +20 -24
  77. package/dist/runtime-port.d.ts.map +1 -0
  78. package/dist/runtime-port.js +10 -11
  79. package/dist/runtime.d.ts.map +1 -0
  80. package/dist/schema/booking-billing.d.ts +5 -5
  81. package/dist/schema/booking-billing.d.ts.map +1 -0
  82. package/dist/schema/enums.d.ts.map +1 -0
  83. package/dist/schema/invoice-documents.d.ts +1 -1
  84. package/dist/schema/invoice-documents.d.ts.map +1 -0
  85. package/dist/schema/payment-instruments.d.ts +1 -1
  86. package/dist/schema/payment-instruments.d.ts.map +1 -0
  87. package/dist/schema/payment-processing.d.ts +3 -3
  88. package/dist/schema/payment-processing.d.ts.map +1 -0
  89. package/dist/schema/payment-sessions.d.ts +3 -3
  90. package/dist/schema/payment-sessions.d.ts.map +1 -0
  91. package/dist/schema/receivables.d.ts +3 -3
  92. package/dist/schema/receivables.d.ts.map +1 -0
  93. package/dist/schema/relations.d.ts.map +1 -0
  94. package/dist/schema/supplier-invoices.d.ts +5 -5
  95. package/dist/schema/supplier-invoices.d.ts.map +1 -0
  96. package/dist/schema/tax.d.ts +1 -1
  97. package/dist/schema/tax.d.ts.map +1 -0
  98. package/dist/schema/vouchers.d.ts +444 -0
  99. package/dist/schema/vouchers.d.ts.map +1 -0
  100. package/dist/schema/vouchers.js +64 -0
  101. package/dist/schema.d.ts.map +1 -0
  102. package/dist/service-accountant-shares.d.ts.map +1 -0
  103. package/dist/service-action-ledger-accounting.d.ts.map +1 -0
  104. package/dist/service-action-ledger-booking-payments.d.ts.map +1 -0
  105. package/dist/service-action-ledger-bookings.d.ts.map +1 -0
  106. package/dist/service-action-ledger-payment-authorizations.d.ts.map +1 -0
  107. package/dist/service-action-ledger-payment-sessions.d.ts.map +1 -0
  108. package/dist/service-action-ledger-supplier-invoices.d.ts.map +1 -0
  109. package/dist/service-action-ledger-supplier-payments.d.ts.map +1 -0
  110. package/dist/service-action-ledger.d.ts.map +1 -0
  111. package/dist/service-aggregates.d.ts.map +1 -0
  112. package/dist/service-booking-billing.d.ts +111 -111
  113. package/dist/service-booking-billing.d.ts.map +1 -0
  114. package/dist/service-booking-create.d.ts +11 -11
  115. package/dist/service-booking-create.d.ts.map +1 -0
  116. package/dist/service-booking-guarantees.d.ts +34 -34
  117. package/dist/service-booking-guarantees.d.ts.map +1 -0
  118. package/dist/service-booking-item-billing.d.ts +21 -21
  119. package/dist/service-booking-item-billing.d.ts.map +1 -0
  120. package/dist/service-booking-payment-schedules.d.ts +56 -56
  121. package/dist/service-booking-payment-schedules.d.ts.map +1 -0
  122. package/dist/service-bookings-dual-create.d.ts +22 -22
  123. package/dist/service-bookings-dual-create.d.ts.map +1 -0
  124. package/dist/service-boundary-sql.d.ts.map +1 -0
  125. package/dist/service-cost-categories.d.ts.map +1 -0
  126. package/dist/service-documents.d.ts.map +1 -0
  127. package/dist/service-invoice-artifacts.d.ts +24 -24
  128. package/dist/service-invoice-artifacts.d.ts.map +1 -0
  129. package/dist/service-invoice-core.d.ts +28 -28
  130. package/dist/service-invoice-core.d.ts.map +1 -0
  131. package/dist/service-invoice-credit-notes.d.ts +10 -10
  132. package/dist/service-invoice-credit-notes.d.ts.map +1 -0
  133. package/dist/service-invoice-from-booking.d.ts +19 -19
  134. package/dist/service-invoice-from-booking.d.ts.map +1 -0
  135. package/dist/service-invoice-line-items.d.ts +10 -10
  136. package/dist/service-invoice-line-items.d.ts.map +1 -0
  137. package/dist/service-invoice-numbering.d.ts +28 -28
  138. package/dist/service-invoice-numbering.d.ts.map +1 -0
  139. package/dist/service-invoice-payments.d.ts +20 -20
  140. package/dist/service-invoice-payments.d.ts.map +1 -0
  141. package/dist/service-invoices.d.ts +87 -87
  142. package/dist/service-invoices.d.ts.map +1 -0
  143. package/dist/service-issue.d.ts +38 -38
  144. package/dist/service-issue.d.ts.map +1 -0
  145. package/dist/service-payment-authorizations.d.ts +26 -26
  146. package/dist/service-payment-authorizations.d.ts.map +1 -0
  147. package/dist/service-payment-instruments.d.ts +10 -10
  148. package/dist/service-payment-instruments.d.ts.map +1 -0
  149. package/dist/service-payment-processing.d.ts +77 -77
  150. package/dist/service-payment-processing.d.ts.map +1 -0
  151. package/dist/service-payment-session-completion.d.ts +3 -3
  152. package/dist/service-payment-session-completion.d.ts.map +1 -0
  153. package/dist/service-payment-sessions.d.ts +38 -38
  154. package/dist/service-payment-sessions.d.ts.map +1 -0
  155. package/dist/service-profitability.d.ts.map +1 -0
  156. package/dist/service-public.d.ts +16 -16
  157. package/dist/service-public.d.ts.map +1 -0
  158. package/dist/service-reference-data.d.ts +23 -23
  159. package/dist/service-reference-data.d.ts.map +1 -0
  160. package/dist/service-rendition-wait.d.ts +1 -1
  161. package/dist/service-rendition-wait.d.ts.map +1 -0
  162. package/dist/service-reports.d.ts.map +1 -0
  163. package/dist/service-settlement.d.ts.map +1 -0
  164. package/dist/service-shared.d.ts +4 -4
  165. package/dist/service-shared.d.ts.map +1 -0
  166. package/dist/service-supplier-invoices.d.ts +20 -20
  167. package/dist/service-supplier-invoices.d.ts.map +1 -0
  168. package/dist/service-supplier-payments.d.ts +16 -16
  169. package/dist/service-supplier-payments.d.ts.map +1 -0
  170. package/dist/service-travel-credits.d.ts +10 -10
  171. package/dist/service-vouchers-migration.d.ts +51 -0
  172. package/dist/service-vouchers-migration.d.ts.map +1 -0
  173. package/dist/service-vouchers-migration.js +154 -0
  174. package/dist/service-vouchers.d.ts +157 -0
  175. package/dist/service-vouchers.d.ts.map +1 -0
  176. package/dist/service-vouchers.js +191 -0
  177. package/dist/service.d.ts +376 -376
  178. package/dist/service.d.ts.map +1 -0
  179. package/dist/stale-booking-holds-runtime.d.ts.map +1 -0
  180. package/dist/tools.d.ts +21 -21
  181. package/dist/tools.d.ts.map +1 -0
  182. package/dist/validation-billing.d.ts.map +1 -0
  183. package/dist/validation-payments.d.ts.map +1 -0
  184. package/dist/validation-public.d.ts.map +1 -0
  185. package/dist/validation-shared.d.ts.map +1 -0
  186. package/dist/validation-vouchers.d.ts +2 -0
  187. package/dist/validation-vouchers.d.ts.map +1 -0
  188. package/dist/validation-vouchers.js +1 -0
  189. package/dist/validation.d.ts.map +1 -0
  190. package/dist/voyant.d.ts +2 -1
  191. package/dist/voyant.d.ts.map +1 -0
  192. package/dist/voyant.js +43 -7
  193. package/openapi/admin/booking-tax-preview.json +33 -0
  194. package/openapi/admin/{booking-tax.json → booking-tax-settings.json} +7 -32
  195. package/package.json +205 -170
  196. package/LICENSE +0 -201
package/README.md CHANGED
@@ -114,14 +114,19 @@ Mounted Finance routes include:
114
114
  ## Booking Tax Preview
115
115
 
116
116
  Booking creation UIs can show the same tax line that booking finalization will
117
- persist by mounting the booking-tax extension:
117
+ persist by mounting the booking-tax extensions. The surface is split in two:
118
+ tax **settings** live on the finance admin surface, and tax **preview** lives on
119
+ the bookings admin surface:
118
120
 
119
121
  ```typescript
120
- import { createBookingTaxApiExtension } from "@voyant-travel/finance/booking-tax"
122
+ import {
123
+ createBookingTaxSettingsApiExtension,
124
+ createBookingTaxPreviewApiExtension,
125
+ } from "@voyant-travel/finance/booking-tax"
121
126
 
122
127
  createApp({
123
128
  extensions: [
124
- createBookingTaxApiExtension({
129
+ createBookingTaxSettingsApiExtension({
125
130
  resolveBookingTaxSettings: async (db) => {
126
131
  const settings = await getTaxSettings(db)
127
132
  return {
@@ -129,6 +134,10 @@ createApp({
129
134
  taxPolicyProfileId: settings?.taxPolicyProfileId ?? null,
130
135
  }
131
136
  },
137
+ updateBookingTaxSettings: async (db, next) => saveTaxSettings(db, next),
138
+ }),
139
+ createBookingTaxPreviewApiExtension({
140
+ resolveBookingTaxSettings: async (db) => getTaxSettings(db),
132
141
  }),
133
142
  ],
134
143
  })
@@ -139,16 +148,21 @@ settings table, KV, environment configuration, or any other deployment-owned
139
148
  store, while `@voyant-travel/finance` owns the tax policy rule walker, tax-regime
140
149
  lookup, product tax-class fallback, and inclusive/exclusive math.
141
150
 
142
- Templates that already mount custom routes can call `mountBookingTaxRoutes(...)`
143
- from the same entrypoint instead of using the API extension.
151
+ Templates that already mount custom routes can call
152
+ `mountBookingTaxSettingsRoutes(...)` / `mountBookingTaxPreviewRoutes(...)` from
153
+ the same entrypoint instead of using the API extensions.
144
154
 
145
- Mounting this route registers:
155
+ Mounting these routes registers:
146
156
 
147
- - `GET /v1/admin/bookings/tax-settings`
148
- - `PATCH /v1/admin/bookings/tax-settings` when `updateBookingTaxSettings` is supplied
157
+ - `GET /v1/admin/finance/tax-settings`
158
+ - `PATCH /v1/admin/finance/tax-settings` when `updateBookingTaxSettings` is supplied
149
159
  - `POST /v1/admin/bookings/tax-preview`
150
160
 
151
- The preview endpoint is consumed by `@voyant-travel/bookings-react` tax-preview
161
+ Tax settings sit on the finance admin surface (alongside tax regimes, policy
162
+ rules, and invoice-fx) so the managed runtime's per-unit, prefix-first-match
163
+ admin dispatch does not let the bookings `GET /{id}` route swallow
164
+ `/tax-settings`. The preview endpoint is consumed by
165
+ `@voyant-travel/bookings-react` tax-preview
152
166
  hooks. Consumers that use the booking-create dialog without mounting the route
153
167
  will silently lose tax rows in the dialog summary because the client treats a
154
168
  missing preview as "no tax to show".
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-ledger-drift.d.ts","sourceRoot":"","sources":["../src/action-ledger-drift.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,KAAK,GAAG,EAAwB,MAAM,aAAa,CAAA;AAmB5D,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAA;AAErF,MAAM,WAAW,kCAAkC;IACjD,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,6BAA6B,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,mCAAmC;IAClD,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,2BAA2B,EAAE,CAAA;CACpC;AAED,UAAU,gCAAiC,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,KAAK,EAAE,6BAA6B,CAAA;IACpC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,oCAAoC,CAClD,KAAK,GAAE,kCAAuC,GAC7C,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,gCAAgC,CAAC,CAAC,CA0G9E;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,YAAY,EAChB,KAAK,GAAE,kCAAuC,GAC7C,OAAO,CAAC,mCAAmC,CAAC,CAe9C;AA0BD,iBAAS,YAAY,CAAC,GAAG,EAAE,gCAAgC,GAAG,2BAA2B,CAMxF;AAED,eAAO,MAAM,QAAQ;;CAEpB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booking-lifecycle.d.ts","sourceRoot":"","sources":["../src/booking-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAKxE,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,OAAO,GAAG,SAAS,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,CAAA;IACtF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB;AAUD,eAAO,MAAM,uBAAuB,EAAE,yBAGrC,CAAA;AAED,wBAAsB,oCAAoC,CACxD,EAAE,EAAE,UAAU,CAAC,yBAAyB,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/E,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,uCAAuC,CAC3D,EAAE,EAAE,UAAU,CAAC,yBAAyB,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrF,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CA2CzC;AAED,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,kCAAkC,GACxC,MAAM,CAOR"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriber-runtime.d.ts","sourceRoot":"","sources":["../../src/booking-schedule/subscriber-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EACL,KAAK,4BAA4B,EACjC,iCAAiC,EAClC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAA;AAE3E,eAAO,MAAM,sCAAsC,iEACa,CAAA;AAChE,eAAO,MAAM,uCAAuC,6CAA6C,CAAA;AAEjG,MAAM,WAAW,gCAAgC;IAC/C,oBAAoB,CAClB,QAAQ,EAAE,OAAO,GAChB,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAA;IACvE,6EAA6E;IAC7E,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC5F;AAED,MAAM,WAAW,qCAAqC;IACpD,gBAAgB,CAAC,EAAE,OAAO,iCAAiC,CAAA;IAC3D,sBAAsB,CAAC,EAAE,OAAO,oCAAoC,CAAA;IACpE,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CAChC;AAQD,8EAA8E;AAC9E,wBAAgB,sCAAsC,CACpD,YAAY,GAAE,qCAA0C,GACvD,2BAA2B,CA2B7B;AAeD,eAAO,MAAM,kCAAkC,6BAA2C,CAAA"}
@@ -13,12 +13,6 @@ export type ResolvedBookingSellTaxRate = {
13
13
  priceMode: "inclusive" | "exclusive";
14
14
  };
15
15
  export type InvoicingMode = "direct" | "proforma-first";
16
- /**
17
- * Official FX reference-rate source. `ecb` (default) covers most EU
18
- * operators; `bnr` is the National Bank of Romania. A setting, not
19
- * per-country code — new jurisdictions add values here, not modules.
20
- */
21
- export type FxReferenceSource = "ecb" | "bnr";
22
16
  export type BookingTaxSettings = {
23
17
  taxPriceMode?: "inclusive" | "exclusive" | null;
24
18
  taxPolicyProfileId?: string | null;
@@ -30,10 +24,6 @@ export type BookingTaxSettings = {
30
24
  * never consult this. Absent/null → `proforma-first`.
31
25
  */
32
26
  invoicingMode?: InvoicingMode | null;
33
- /**
34
- * Operator's official FX reference-rate source. Absent/null → `ecb`.
35
- */
36
- fxReferenceSource?: FxReferenceSource | null;
37
27
  };
38
28
  export type ResolveBookingTaxSettings = (db: PostgresJsDatabase) => BookingTaxSettings | null | undefined | Promise<BookingTaxSettings | null | undefined>;
39
29
  export type UpdateBookingTaxSettings = (db: PostgresJsDatabase, settings: BookingTaxSettings) => BookingTaxSettings | null | undefined | Promise<BookingTaxSettings | null | undefined>;
@@ -71,7 +61,16 @@ export declare function computeBookingItemTaxLine(taxRate: ResolvedBookingSellTa
71
61
  } | null;
72
62
  export declare function loadProductTaxFacts(db: PostgresJsDatabase, productId: string): Promise<ProductTaxFacts>;
73
63
  export declare function matchesTaxPolicyCondition(condition: TaxPolicyCondition | null | undefined, facts: ProductTaxFacts): boolean;
74
- export declare function createBookingTaxRoutes(options?: BookingTaxRouteOptions): OpenAPIHono<{
64
+ /**
65
+ * Booking tax **settings** routes: `GET`/`PATCH /tax-settings`.
66
+ *
67
+ * Mounted on the finance admin surface (`/v1/admin/finance/tax-settings`)
68
+ * so it lands alongside the other finance-owned settings (tax regimes,
69
+ * tax-policy-rules, invoice-fx) rather than under `/v1/admin/bookings`,
70
+ * where the bookings package's `GET /{id}` route would otherwise capture
71
+ * `/tax-settings` under the managed runtime's prefix-first-match dispatch.
72
+ */
73
+ export declare function createBookingTaxSettingsRoutes(options?: BookingTaxRouteOptions): OpenAPIHono<{
75
74
  Variables: {
76
75
  db: PostgresJsDatabase;
77
76
  };
@@ -84,7 +83,6 @@ export declare function createBookingTaxRoutes(options?: BookingTaxRouteOptions)
84
83
  taxPriceMode: "inclusive" | "exclusive";
85
84
  taxPolicyProfileId: string | null;
86
85
  invoicingMode: "direct" | "proforma-first";
87
- fxReferenceSource: "ecb" | "bnr";
88
86
  };
89
87
  };
90
88
  outputFormat: "json";
@@ -99,7 +97,6 @@ export declare function createBookingTaxRoutes(options?: BookingTaxRouteOptions)
99
97
  taxPriceMode?: "inclusive" | "exclusive" | undefined;
100
98
  taxPolicyProfileId?: string | null | undefined;
101
99
  invoicingMode?: "direct" | "proforma-first" | undefined;
102
- fxReferenceSource?: "ecb" | "bnr" | undefined;
103
100
  };
104
101
  };
105
102
  output: {};
@@ -111,7 +108,6 @@ export declare function createBookingTaxRoutes(options?: BookingTaxRouteOptions)
111
108
  taxPriceMode?: "inclusive" | "exclusive" | undefined;
112
109
  taxPolicyProfileId?: string | null | undefined;
113
110
  invoicingMode?: "direct" | "proforma-first" | undefined;
114
- fxReferenceSource?: "ecb" | "bnr" | undefined;
115
111
  };
116
112
  };
117
113
  output: {
@@ -119,14 +115,25 @@ export declare function createBookingTaxRoutes(options?: BookingTaxRouteOptions)
119
115
  taxPriceMode: "inclusive" | "exclusive";
120
116
  taxPolicyProfileId: string | null;
121
117
  invoicingMode: "direct" | "proforma-first";
122
- fxReferenceSource: "ecb" | "bnr";
123
118
  };
124
119
  };
125
120
  outputFormat: "json";
126
121
  status: 200;
127
122
  };
128
123
  };
129
- } & {
124
+ }, "/">;
125
+ /**
126
+ * Booking tax **preview** route: `POST /tax-preview`.
127
+ *
128
+ * Stays on the bookings admin surface (`/v1/admin/bookings/tax-preview`);
129
+ * `POST` does not collide with bookings' `GET /{id}`, and
130
+ * `@voyant-travel/bookings-react` consumes it there.
131
+ */
132
+ export declare function createBookingTaxPreviewRoutes(options?: BookingTaxRouteOptions): OpenAPIHono<{
133
+ Variables: {
134
+ db: PostgresJsDatabase;
135
+ };
136
+ }, {
130
137
  "/tax-preview": {
131
138
  $post: {
132
139
  input: {
@@ -155,6 +162,11 @@ export declare function createBookingTaxRoutes(options?: BookingTaxRouteOptions)
155
162
  };
156
163
  };
157
164
  }, "/">;
158
- export declare function mountBookingTaxRoutes(hono: Hono, options?: BookingTaxRouteOptions): void;
159
- export declare function createBookingTaxApiExtension(options?: BookingTaxRouteOptions): ApiExtension;
160
- export declare const createBookingTaxVoyantRuntime: import("@voyant-travel/core/project").VoyantGraphRuntimeFactory<ApiExtension>;
165
+ /** Mount the tax-settings routes under the finance admin surface. */
166
+ export declare function mountBookingTaxSettingsRoutes(hono: Hono, options?: BookingTaxRouteOptions): void;
167
+ /** Mount the tax-preview route under the bookings admin surface. */
168
+ export declare function mountBookingTaxPreviewRoutes(hono: Hono, options?: BookingTaxRouteOptions): void;
169
+ export declare function createBookingTaxSettingsApiExtension(options?: BookingTaxRouteOptions): ApiExtension;
170
+ export declare function createBookingTaxPreviewApiExtension(options?: BookingTaxRouteOptions): ApiExtension;
171
+ export declare const createBookingTaxSettingsVoyantRuntime: import("@voyant-travel/core/project").VoyantGraphRuntimeFactory<ApiExtension>;
172
+ export declare const createBookingTaxPreviewVoyantRuntime: import("@voyant-travel/core/project").VoyantGraphRuntimeFactory<ApiExtension>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booking-tax.d.ts","sourceRoot":"","sources":["../src/booking-tax.ts"],"names":[],"mappings":"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"}
@@ -15,14 +15,12 @@ const bookingTaxSettingsPatchSchema = z.object({
15
15
  taxPriceMode: z.enum(["inclusive", "exclusive"]).optional(),
16
16
  taxPolicyProfileId: z.string().min(1).nullable().optional(),
17
17
  invoicingMode: z.enum(["direct", "proforma-first"]).optional(),
18
- fxReferenceSource: z.enum(["ecb", "bnr"]).optional(),
19
18
  });
20
19
  const bookingTaxSettingsResponseSchema = z.object({
21
20
  data: z.object({
22
21
  taxPriceMode: z.enum(["inclusive", "exclusive"]),
23
22
  taxPolicyProfileId: z.string().nullable(),
24
23
  invoicingMode: z.enum(["direct", "proforma-first"]),
25
- fxReferenceSource: z.enum(["ecb", "bnr"]),
26
24
  }),
27
25
  });
28
26
  const bookingTaxPreviewResponseSchema = z.object({
@@ -118,7 +116,6 @@ async function resolveBookingTaxSettingsOrDefault(db, options = {}) {
118
116
  taxPriceMode: settings?.taxPriceMode === "exclusive" ? "exclusive" : "inclusive",
119
117
  taxPolicyProfileId: settings?.taxPolicyProfileId ?? null,
120
118
  invoicingMode: settings?.invoicingMode === "direct" ? "direct" : "proforma-first",
121
- fxReferenceSource: settings?.fxReferenceSource === "bnr" ? "bnr" : "ecb",
122
119
  };
123
120
  }
124
121
  export function computeBookingItemTaxLine(taxRate, amountCents, currency, sortOrder = 0) {
@@ -260,7 +257,16 @@ async function resolveProductTaxClassRate(db, productId, priceMode) {
260
257
  const resolved = await loadResolvedTaxRegime(db, klass.defaultRegimeId, klass.code);
261
258
  return resolved ? { ...resolved, priceMode } : null;
262
259
  }
263
- export function createBookingTaxRoutes(options = {}) {
260
+ /**
261
+ * Booking tax **settings** routes: `GET`/`PATCH /tax-settings`.
262
+ *
263
+ * Mounted on the finance admin surface (`/v1/admin/finance/tax-settings`)
264
+ * so it lands alongside the other finance-owned settings (tax regimes,
265
+ * tax-policy-rules, invoice-fx) rather than under `/v1/admin/bookings`,
266
+ * where the bookings package's `GET /{id}` route would otherwise capture
267
+ * `/tax-settings` under the managed runtime's prefix-first-match dispatch.
268
+ */
269
+ export function createBookingTaxSettingsRoutes(options = {}) {
264
270
  const routes = new OpenAPIHono({ defaultHook: openApiValidationHook })
265
271
  .openapi(getBookingTaxSettingsRoute, async (c) => {
266
272
  return c.json({
@@ -282,13 +288,22 @@ export function createBookingTaxRoutes(options = {}) {
282
288
  ? current.taxPolicyProfileId
283
289
  : patch.taxPolicyProfileId,
284
290
  invoicingMode: patch.invoicingMode ?? current.invoicingMode,
285
- fxReferenceSource: patch.fxReferenceSource ?? current.fxReferenceSource,
286
291
  });
287
292
  return c.json({
288
293
  data: await resolveBookingTaxSettingsOrDefault(c.get("db"), { settings: next }),
289
294
  }, 200);
290
- })
291
- .openapi(previewBookingTaxRoute, async (c) => {
295
+ });
296
+ return stampOpenApiRegistryApiId(routes, "@voyant-travel/finance#booking-tax-settings-extension.api");
297
+ }
298
+ /**
299
+ * Booking tax **preview** route: `POST /tax-preview`.
300
+ *
301
+ * Stays on the bookings admin surface (`/v1/admin/bookings/tax-preview`);
302
+ * `POST` does not collide with bookings' `GET /{id}`, and
303
+ * `@voyant-travel/bookings-react` consumes it there.
304
+ */
305
+ export function createBookingTaxPreviewRoutes(options = {}) {
306
+ const routes = new OpenAPIHono({ defaultHook: openApiValidationHook }).openapi(previewBookingTaxRoute, async (c) => {
292
307
  const body = c.req.valid("json");
293
308
  const taxRate = await resolveBookingSellTaxRate(c.get("db"), { productId: body.productId }, options);
294
309
  const taxLine = computeBookingItemTaxLine(taxRate, body.subtotalCents, body.currency);
@@ -323,21 +338,39 @@ export function createBookingTaxRoutes(options = {}) {
323
338
  },
324
339
  }, 200);
325
340
  });
326
- return stampOpenApiRegistryApiId(routes, "@voyant-travel/finance#booking-tax-extension.api");
341
+ return stampOpenApiRegistryApiId(routes, "@voyant-travel/finance#booking-tax-preview-extension.api");
327
342
  }
328
- export function mountBookingTaxRoutes(hono, options = {}) {
329
- hono.route("/v1/admin/bookings", createBookingTaxRoutes(options));
343
+ /** Mount the tax-settings routes under the finance admin surface. */
344
+ export function mountBookingTaxSettingsRoutes(hono, options = {}) {
345
+ hono.route("/v1/admin/finance", createBookingTaxSettingsRoutes(options));
330
346
  }
331
- export function createBookingTaxApiExtension(options = {}) {
347
+ /** Mount the tax-preview route under the bookings admin surface. */
348
+ export function mountBookingTaxPreviewRoutes(hono, options = {}) {
349
+ hono.route("/v1/admin/bookings", createBookingTaxPreviewRoutes(options));
350
+ }
351
+ export function createBookingTaxSettingsApiExtension(options = {}) {
332
352
  const extension = {
333
- name: "booking-tax",
353
+ name: "booking-tax-settings",
354
+ module: "finance",
355
+ };
356
+ return {
357
+ extension,
358
+ adminRoutes: createBookingTaxSettingsRoutes(options),
359
+ };
360
+ }
361
+ export function createBookingTaxPreviewApiExtension(options = {}) {
362
+ const extension = {
363
+ name: "booking-tax-preview",
334
364
  module: "bookings",
335
365
  };
336
366
  return {
337
367
  extension,
338
- adminRoutes: createBookingTaxRoutes(options),
368
+ adminRoutes: createBookingTaxPreviewRoutes(options),
339
369
  };
340
370
  }
341
- export const createBookingTaxVoyantRuntime = defineGraphRuntimeFactory(async ({ getPort }) => {
342
- return createBookingTaxApiExtension(createFinanceBookingTaxRuntime(await getPort(financeOperatorSettingsRuntimePort)));
371
+ export const createBookingTaxSettingsVoyantRuntime = defineGraphRuntimeFactory(async ({ getPort }) => {
372
+ return createBookingTaxSettingsApiExtension(createFinanceBookingTaxRuntime(await getPort(financeOperatorSettingsRuntimePort)));
373
+ });
374
+ export const createBookingTaxPreviewVoyantRuntime = defineGraphRuntimeFactory(async ({ getPort }) => {
375
+ return createBookingTaxPreviewApiExtension(createFinanceBookingTaxRuntime(await getPort(financeOperatorSettingsRuntimePort)));
343
376
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-payment.d.ts","sourceRoot":"","sources":["../src/card-payment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,kBAAkB,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,oBAAoB,KACvB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAA"}