@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.
- package/README.md +23 -9
- package/dist/action-ledger-drift.d.ts.map +1 -0
- package/dist/booking-lifecycle.d.ts.map +1 -0
- package/dist/booking-schedule/subscriber-runtime.d.ts.map +1 -0
- package/dist/booking-tax.d.ts +31 -19
- package/dist/booking-tax.d.ts.map +1 -0
- package/dist/booking-tax.js +48 -15
- package/dist/card-payment.d.ts.map +1 -0
- package/dist/checkout-routes.d.ts +294 -294
- package/dist/checkout-routes.d.ts.map +1 -0
- package/dist/checkout-service-plan.d.ts +2 -2
- package/dist/checkout-service-plan.d.ts.map +1 -0
- package/dist/checkout-service.d.ts.map +1 -0
- package/dist/checkout-validation.d.ts.map +1 -0
- package/dist/document-download.d.ts.map +1 -0
- package/dist/fx-money.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -3
- package/dist/invoice-fx.d.ts.map +1 -0
- package/dist/invoice-number-errors.d.ts.map +1 -0
- package/dist/linkables.d.ts.map +1 -0
- package/dist/markets-ref.d.ts.map +1 -0
- package/dist/mcp-runtime.d.ts.map +1 -0
- package/dist/order-payment-sessions.d.ts.map +1 -0
- package/dist/payment-adapter-events.d.ts +3 -3
- package/dist/payment-link.d.ts.map +1 -0
- package/dist/payment-policy-cascade.d.ts.map +1 -0
- package/dist/payment-policy.d.ts.map +1 -0
- package/dist/payment-schedule/routes.d.ts +2 -2
- package/dist/payment-schedule/routes.d.ts.map +1 -0
- package/dist/route-runtime.d.ts.map +1 -0
- package/dist/routes-action-ledger.d.ts +25 -25
- package/dist/routes-action-ledger.d.ts.map +1 -0
- package/dist/routes-booking-billing.d.ts +95 -95
- package/dist/routes-booking-billing.d.ts.map +1 -0
- package/dist/routes-booking-create.d.ts.map +1 -0
- package/dist/routes-booking-reads.d.ts +13 -13
- package/dist/routes-booking-reads.d.ts.map +1 -0
- package/dist/routes-documents.d.ts +11 -11
- package/dist/routes-documents.d.ts.map +1 -0
- package/dist/routes-invoice-core.d.ts +87 -87
- package/dist/routes-invoice-core.d.ts.map +1 -0
- package/dist/routes-invoice-documents.d.ts +16 -16
- package/dist/routes-invoice-documents.d.ts.map +1 -0
- package/dist/routes-invoice-issue.d.ts.map +1 -0
- package/dist/routes-invoice-schemas.d.ts +20 -20
- package/dist/routes-invoice-schemas.d.ts.map +1 -0
- package/dist/routes-payment-processing.d.ts +152 -152
- package/dist/routes-payment-processing.d.ts.map +1 -0
- package/dist/routes-payment-schemas.d.ts +17 -17
- package/dist/routes-payment-schemas.d.ts.map +1 -0
- package/dist/routes-payments.d.ts +64 -64
- package/dist/routes-payments.d.ts.map +1 -0
- package/dist/routes-public-accountant.d.ts +19 -19
- package/dist/routes-public.d.ts +102 -102
- package/dist/routes-public.d.ts.map +1 -0
- package/dist/routes-reference-data.d.ts +33 -33
- package/dist/routes-reference-data.d.ts.map +1 -0
- package/dist/routes-reports.d.ts +11 -11
- package/dist/routes-reports.d.ts.map +1 -0
- package/dist/routes-runtime.d.ts +1 -1
- package/dist/routes-runtime.d.ts.map +1 -0
- package/dist/routes-settlement.d.ts +12 -12
- package/dist/routes-settlement.d.ts.map +1 -0
- package/dist/routes-shared.d.ts.map +1 -0
- package/dist/routes-supplier-invoices.d.ts +75 -75
- package/dist/routes-supplier-invoices.d.ts.map +1 -0
- package/dist/routes-travel-credits.d.ts +4 -4
- package/dist/routes-vouchers.d.ts +401 -0
- package/dist/routes-vouchers.d.ts.map +1 -0
- package/dist/routes-vouchers.js +176 -0
- package/dist/routes.d.ts +477 -477
- package/dist/routes.d.ts.map +1 -0
- package/dist/runtime-contributor.d.ts.map +1 -0
- package/dist/runtime-port.d.ts +20 -24
- package/dist/runtime-port.d.ts.map +1 -0
- package/dist/runtime-port.js +10 -11
- package/dist/runtime.d.ts.map +1 -0
- package/dist/schema/booking-billing.d.ts +5 -5
- package/dist/schema/booking-billing.d.ts.map +1 -0
- package/dist/schema/enums.d.ts.map +1 -0
- package/dist/schema/invoice-documents.d.ts +1 -1
- package/dist/schema/invoice-documents.d.ts.map +1 -0
- package/dist/schema/payment-instruments.d.ts +1 -1
- package/dist/schema/payment-instruments.d.ts.map +1 -0
- package/dist/schema/payment-processing.d.ts +3 -3
- package/dist/schema/payment-processing.d.ts.map +1 -0
- package/dist/schema/payment-sessions.d.ts +3 -3
- package/dist/schema/payment-sessions.d.ts.map +1 -0
- package/dist/schema/receivables.d.ts +3 -3
- package/dist/schema/receivables.d.ts.map +1 -0
- package/dist/schema/relations.d.ts.map +1 -0
- package/dist/schema/supplier-invoices.d.ts +5 -5
- package/dist/schema/supplier-invoices.d.ts.map +1 -0
- package/dist/schema/tax.d.ts +1 -1
- package/dist/schema/tax.d.ts.map +1 -0
- package/dist/schema/vouchers.d.ts +444 -0
- package/dist/schema/vouchers.d.ts.map +1 -0
- package/dist/schema/vouchers.js +64 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/service-accountant-shares.d.ts.map +1 -0
- package/dist/service-action-ledger-accounting.d.ts.map +1 -0
- package/dist/service-action-ledger-booking-payments.d.ts.map +1 -0
- package/dist/service-action-ledger-bookings.d.ts.map +1 -0
- package/dist/service-action-ledger-payment-authorizations.d.ts.map +1 -0
- package/dist/service-action-ledger-payment-sessions.d.ts.map +1 -0
- package/dist/service-action-ledger-supplier-invoices.d.ts.map +1 -0
- package/dist/service-action-ledger-supplier-payments.d.ts.map +1 -0
- package/dist/service-action-ledger.d.ts.map +1 -0
- package/dist/service-aggregates.d.ts.map +1 -0
- package/dist/service-booking-billing.d.ts +111 -111
- package/dist/service-booking-billing.d.ts.map +1 -0
- package/dist/service-booking-create.d.ts +11 -11
- package/dist/service-booking-create.d.ts.map +1 -0
- package/dist/service-booking-guarantees.d.ts +34 -34
- package/dist/service-booking-guarantees.d.ts.map +1 -0
- package/dist/service-booking-item-billing.d.ts +21 -21
- package/dist/service-booking-item-billing.d.ts.map +1 -0
- package/dist/service-booking-payment-schedules.d.ts +56 -56
- package/dist/service-booking-payment-schedules.d.ts.map +1 -0
- package/dist/service-bookings-dual-create.d.ts +22 -22
- package/dist/service-bookings-dual-create.d.ts.map +1 -0
- package/dist/service-boundary-sql.d.ts.map +1 -0
- package/dist/service-cost-categories.d.ts.map +1 -0
- package/dist/service-documents.d.ts.map +1 -0
- package/dist/service-invoice-artifacts.d.ts +24 -24
- package/dist/service-invoice-artifacts.d.ts.map +1 -0
- package/dist/service-invoice-core.d.ts +28 -28
- package/dist/service-invoice-core.d.ts.map +1 -0
- package/dist/service-invoice-credit-notes.d.ts +10 -10
- package/dist/service-invoice-credit-notes.d.ts.map +1 -0
- package/dist/service-invoice-from-booking.d.ts +19 -19
- package/dist/service-invoice-from-booking.d.ts.map +1 -0
- package/dist/service-invoice-line-items.d.ts +10 -10
- package/dist/service-invoice-line-items.d.ts.map +1 -0
- package/dist/service-invoice-numbering.d.ts +28 -28
- package/dist/service-invoice-numbering.d.ts.map +1 -0
- package/dist/service-invoice-payments.d.ts +20 -20
- package/dist/service-invoice-payments.d.ts.map +1 -0
- package/dist/service-invoices.d.ts +87 -87
- package/dist/service-invoices.d.ts.map +1 -0
- package/dist/service-issue.d.ts +38 -38
- package/dist/service-issue.d.ts.map +1 -0
- package/dist/service-payment-authorizations.d.ts +26 -26
- package/dist/service-payment-authorizations.d.ts.map +1 -0
- package/dist/service-payment-instruments.d.ts +10 -10
- package/dist/service-payment-instruments.d.ts.map +1 -0
- package/dist/service-payment-processing.d.ts +77 -77
- package/dist/service-payment-processing.d.ts.map +1 -0
- package/dist/service-payment-session-completion.d.ts +3 -3
- package/dist/service-payment-session-completion.d.ts.map +1 -0
- package/dist/service-payment-sessions.d.ts +38 -38
- package/dist/service-payment-sessions.d.ts.map +1 -0
- package/dist/service-profitability.d.ts.map +1 -0
- package/dist/service-public.d.ts +16 -16
- package/dist/service-public.d.ts.map +1 -0
- package/dist/service-reference-data.d.ts +23 -23
- package/dist/service-reference-data.d.ts.map +1 -0
- package/dist/service-rendition-wait.d.ts +1 -1
- package/dist/service-rendition-wait.d.ts.map +1 -0
- package/dist/service-reports.d.ts.map +1 -0
- package/dist/service-settlement.d.ts.map +1 -0
- package/dist/service-shared.d.ts +4 -4
- package/dist/service-shared.d.ts.map +1 -0
- package/dist/service-supplier-invoices.d.ts +20 -20
- package/dist/service-supplier-invoices.d.ts.map +1 -0
- package/dist/service-supplier-payments.d.ts +16 -16
- package/dist/service-supplier-payments.d.ts.map +1 -0
- package/dist/service-travel-credits.d.ts +10 -10
- package/dist/service-vouchers-migration.d.ts +51 -0
- package/dist/service-vouchers-migration.d.ts.map +1 -0
- package/dist/service-vouchers-migration.js +154 -0
- package/dist/service-vouchers.d.ts +157 -0
- package/dist/service-vouchers.d.ts.map +1 -0
- package/dist/service-vouchers.js +191 -0
- package/dist/service.d.ts +376 -376
- package/dist/service.d.ts.map +1 -0
- package/dist/stale-booking-holds-runtime.d.ts.map +1 -0
- package/dist/tools.d.ts +21 -21
- package/dist/tools.d.ts.map +1 -0
- package/dist/validation-billing.d.ts.map +1 -0
- package/dist/validation-payments.d.ts.map +1 -0
- package/dist/validation-public.d.ts.map +1 -0
- package/dist/validation-shared.d.ts.map +1 -0
- package/dist/validation-vouchers.d.ts +2 -0
- package/dist/validation-vouchers.d.ts.map +1 -0
- package/dist/validation-vouchers.js +1 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/voyant.d.ts +2 -1
- package/dist/voyant.d.ts.map +1 -0
- package/dist/voyant.js +43 -7
- package/openapi/admin/booking-tax-preview.json +33 -0
- package/openapi/admin/{booking-tax.json → booking-tax-settings.json} +7 -32
- package/package.json +205 -170
- 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
|
|
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 {
|
|
122
|
+
import {
|
|
123
|
+
createBookingTaxSettingsApiExtension,
|
|
124
|
+
createBookingTaxPreviewApiExtension,
|
|
125
|
+
} from "@voyant-travel/finance/booking-tax"
|
|
121
126
|
|
|
122
127
|
createApp({
|
|
123
128
|
extensions: [
|
|
124
|
-
|
|
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
|
|
143
|
-
|
|
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
|
|
155
|
+
Mounting these routes registers:
|
|
146
156
|
|
|
147
|
-
- `GET /v1/admin/
|
|
148
|
-
- `PATCH /v1/admin/
|
|
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
|
-
|
|
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"}
|
package/dist/booking-tax.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
159
|
-
export declare function
|
|
160
|
-
|
|
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":"AAAA,OAAO,EAAe,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAI/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAOhC,MAAM,MAAM,eAAe,GAAG;IAC5B,gBAAgB,EAAE,OAAO,CAAA;IACzB,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,WAAW,GAAG,WAAW,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAA;IAC/C,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC,CAAA;AAOD,MAAM,MAAM,yBAAyB,GAAG,CACtC,EAAE,EAAE,kBAAkB,KACnB,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAmF3F,MAAM,MAAM,wBAAwB,GAAG,CACrC,EAAE,EAAE,kBAAkB,EACtB,QAAQ,EAAE,kBAAkB,KACzB,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAE3F,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAChB;IAAE,GAAG,EAAE,kBAAkB,EAAE,CAAA;CAAE,GAC7B;IAAE,GAAG,EAAE,kBAAkB,EAAE,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,eAAe,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAErE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACpC,yBAAyB,CAAC,EAAE,yBAAyB,CAAA;CACtD;AAED,MAAM,WAAW,sBAAuB,SAAQ,gCAAgC;IAC9E,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;CACpD;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CACjC,EACD,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAoC5C;AAiBD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAAG,IAAI,EAC1C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAI;;;;;;;;;SAmBd;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,EAChD,KAAK,EAAE,eAAe,GACrB,OAAO,CAeT;AA6FD,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,sBAA2B;eAE5D;QACT,EAAE,EAAE,kBAAkB,CAAA;KACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqFJ;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,sBAA2B,GAAG,IAAI,CAE5F;AAED,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAUjG;AAED,eAAO,MAAM,6BAA6B,gFAIxC,CAAA"}
|
package/dist/booking-tax.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
329
|
-
|
|
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
|
-
|
|
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:
|
|
368
|
+
adminRoutes: createBookingTaxPreviewRoutes(options),
|
|
339
369
|
};
|
|
340
370
|
}
|
|
341
|
-
export const
|
|
342
|
-
return
|
|
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"}
|