partnermax 0.2.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/CHANGELOG.md +47 -0
- package/LICENSE +201 -0
- package/README.md +370 -0
- package/api-promise.d.mts +3 -0
- package/api-promise.d.mts.map +1 -0
- package/api-promise.d.ts +3 -0
- package/api-promise.d.ts.map +1 -0
- package/api-promise.js +6 -0
- package/api-promise.js.map +1 -0
- package/api-promise.mjs +3 -0
- package/api-promise.mjs.map +1 -0
- package/client.d.mts +212 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +212 -0
- package/client.d.ts.map +1 -0
- package/client.js +528 -0
- package/client.js.map +1 -0
- package/client.mjs +524 -0
- package/client.mjs.map +1 -0
- package/core/api-promise.d.mts +46 -0
- package/core/api-promise.d.mts.map +1 -0
- package/core/api-promise.d.ts +46 -0
- package/core/api-promise.d.ts.map +1 -0
- package/core/api-promise.js +74 -0
- package/core/api-promise.js.map +1 -0
- package/core/api-promise.mjs +70 -0
- package/core/api-promise.mjs.map +1 -0
- package/core/error.d.mts +46 -0
- package/core/error.d.mts.map +1 -0
- package/core/error.d.ts +46 -0
- package/core/error.d.ts.map +1 -0
- package/core/error.js +113 -0
- package/core/error.js.map +1 -0
- package/core/error.mjs +97 -0
- package/core/error.mjs.map +1 -0
- package/core/resource.d.mts +6 -0
- package/core/resource.d.mts.map +1 -0
- package/core/resource.d.ts +6 -0
- package/core/resource.d.ts.map +1 -0
- package/core/resource.js +11 -0
- package/core/resource.js.map +1 -0
- package/core/resource.mjs +7 -0
- package/core/resource.mjs.map +1 -0
- package/core/uploads.d.mts +3 -0
- package/core/uploads.d.mts.map +1 -0
- package/core/uploads.d.ts +3 -0
- package/core/uploads.d.ts.map +1 -0
- package/core/uploads.js +6 -0
- package/core/uploads.js.map +1 -0
- package/core/uploads.mjs +2 -0
- package/core/uploads.mjs.map +1 -0
- package/error.d.mts +3 -0
- package/error.d.mts.map +1 -0
- package/error.d.ts +3 -0
- package/error.d.ts.map +1 -0
- package/error.js +6 -0
- package/error.js.map +1 -0
- package/error.mjs +3 -0
- package/error.mjs.map +1 -0
- package/index.d.mts +6 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +6 -0
- package/index.d.ts.map +1 -0
- package/index.js +30 -0
- package/index.js.map +1 -0
- package/index.mjs +7 -0
- package/index.mjs.map +1 -0
- package/internal/builtin-types.d.mts +73 -0
- package/internal/builtin-types.d.mts.map +1 -0
- package/internal/builtin-types.d.ts +73 -0
- package/internal/builtin-types.d.ts.map +1 -0
- package/internal/builtin-types.js +4 -0
- package/internal/builtin-types.js.map +1 -0
- package/internal/builtin-types.mjs +3 -0
- package/internal/builtin-types.mjs.map +1 -0
- package/internal/detect-platform.d.mts +15 -0
- package/internal/detect-platform.d.mts.map +1 -0
- package/internal/detect-platform.d.ts +15 -0
- package/internal/detect-platform.d.ts.map +1 -0
- package/internal/detect-platform.js +162 -0
- package/internal/detect-platform.js.map +1 -0
- package/internal/detect-platform.mjs +157 -0
- package/internal/detect-platform.mjs.map +1 -0
- package/internal/errors.d.mts +3 -0
- package/internal/errors.d.mts.map +1 -0
- package/internal/errors.d.ts +3 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +41 -0
- package/internal/errors.js.map +1 -0
- package/internal/errors.mjs +36 -0
- package/internal/errors.mjs.map +1 -0
- package/internal/headers.d.mts +20 -0
- package/internal/headers.d.mts.map +1 -0
- package/internal/headers.d.ts +20 -0
- package/internal/headers.d.ts.map +1 -0
- package/internal/headers.js +79 -0
- package/internal/headers.js.map +1 -0
- package/internal/headers.mjs +74 -0
- package/internal/headers.mjs.map +1 -0
- package/internal/parse.d.mts +12 -0
- package/internal/parse.d.mts.map +1 -0
- package/internal/parse.d.ts +12 -0
- package/internal/parse.d.ts.map +1 -0
- package/internal/parse.js +40 -0
- package/internal/parse.js.map +1 -0
- package/internal/parse.mjs +37 -0
- package/internal/parse.mjs.map +1 -0
- package/internal/request-options.d.mts +75 -0
- package/internal/request-options.d.mts.map +1 -0
- package/internal/request-options.d.ts +75 -0
- package/internal/request-options.d.ts.map +1 -0
- package/internal/request-options.js +14 -0
- package/internal/request-options.js.map +1 -0
- package/internal/request-options.mjs +10 -0
- package/internal/request-options.mjs.map +1 -0
- package/internal/shim-types.d.mts +17 -0
- package/internal/shim-types.d.mts.map +1 -0
- package/internal/shim-types.d.ts +17 -0
- package/internal/shim-types.d.ts.map +1 -0
- package/internal/shim-types.js +4 -0
- package/internal/shim-types.js.map +1 -0
- package/internal/shim-types.mjs +3 -0
- package/internal/shim-types.mjs.map +1 -0
- package/internal/shims.d.mts +26 -0
- package/internal/shims.d.mts.map +1 -0
- package/internal/shims.d.ts +26 -0
- package/internal/shims.d.ts.map +1 -0
- package/internal/shims.js +92 -0
- package/internal/shims.js.map +1 -0
- package/internal/shims.mjs +85 -0
- package/internal/shims.mjs.map +1 -0
- package/internal/to-file.d.mts +45 -0
- package/internal/to-file.d.mts.map +1 -0
- package/internal/to-file.d.ts +45 -0
- package/internal/to-file.d.ts.map +1 -0
- package/internal/to-file.js +91 -0
- package/internal/to-file.js.map +1 -0
- package/internal/to-file.mjs +88 -0
- package/internal/to-file.mjs.map +1 -0
- package/internal/tslib.js +81 -0
- package/internal/tslib.mjs +17 -0
- package/internal/types.d.mts +69 -0
- package/internal/types.d.mts.map +1 -0
- package/internal/types.d.ts +69 -0
- package/internal/types.d.ts.map +1 -0
- package/internal/types.js +4 -0
- package/internal/types.js.map +1 -0
- package/internal/types.mjs +3 -0
- package/internal/types.mjs.map +1 -0
- package/internal/uploads.d.mts +42 -0
- package/internal/uploads.d.mts.map +1 -0
- package/internal/uploads.d.ts +42 -0
- package/internal/uploads.d.ts.map +1 -0
- package/internal/uploads.js +141 -0
- package/internal/uploads.js.map +1 -0
- package/internal/uploads.mjs +131 -0
- package/internal/uploads.mjs.map +1 -0
- package/internal/utils/base64.d.mts +3 -0
- package/internal/utils/base64.d.mts.map +1 -0
- package/internal/utils/base64.d.ts +3 -0
- package/internal/utils/base64.d.ts.map +1 -0
- package/internal/utils/base64.js +38 -0
- package/internal/utils/base64.js.map +1 -0
- package/internal/utils/base64.mjs +33 -0
- package/internal/utils/base64.mjs.map +1 -0
- package/internal/utils/bytes.d.mts +4 -0
- package/internal/utils/bytes.d.mts.map +1 -0
- package/internal/utils/bytes.d.ts +4 -0
- package/internal/utils/bytes.d.ts.map +1 -0
- package/internal/utils/bytes.js +31 -0
- package/internal/utils/bytes.js.map +1 -0
- package/internal/utils/bytes.mjs +26 -0
- package/internal/utils/bytes.mjs.map +1 -0
- package/internal/utils/env.d.mts +9 -0
- package/internal/utils/env.d.mts.map +1 -0
- package/internal/utils/env.d.ts +9 -0
- package/internal/utils/env.d.ts.map +1 -0
- package/internal/utils/env.js +22 -0
- package/internal/utils/env.js.map +1 -0
- package/internal/utils/env.mjs +18 -0
- package/internal/utils/env.mjs.map +1 -0
- package/internal/utils/log.d.mts +37 -0
- package/internal/utils/log.d.mts.map +1 -0
- package/internal/utils/log.d.ts +37 -0
- package/internal/utils/log.d.ts.map +1 -0
- package/internal/utils/log.js +87 -0
- package/internal/utils/log.js.map +1 -0
- package/internal/utils/log.mjs +81 -0
- package/internal/utils/log.mjs.map +1 -0
- package/internal/utils/path.d.mts +15 -0
- package/internal/utils/path.d.mts.map +1 -0
- package/internal/utils/path.d.ts +15 -0
- package/internal/utils/path.d.ts.map +1 -0
- package/internal/utils/path.js +79 -0
- package/internal/utils/path.js.map +1 -0
- package/internal/utils/path.mjs +74 -0
- package/internal/utils/path.mjs.map +1 -0
- package/internal/utils/query.d.mts +5 -0
- package/internal/utils/query.d.mts.map +1 -0
- package/internal/utils/query.d.ts +5 -0
- package/internal/utils/query.d.ts.map +1 -0
- package/internal/utils/query.js +23 -0
- package/internal/utils/query.js.map +1 -0
- package/internal/utils/query.mjs +20 -0
- package/internal/utils/query.mjs.map +1 -0
- package/internal/utils/sleep.d.mts +2 -0
- package/internal/utils/sleep.d.mts.map +1 -0
- package/internal/utils/sleep.d.ts +2 -0
- package/internal/utils/sleep.d.ts.map +1 -0
- package/internal/utils/sleep.js +7 -0
- package/internal/utils/sleep.js.map +1 -0
- package/internal/utils/sleep.mjs +3 -0
- package/internal/utils/sleep.mjs.map +1 -0
- package/internal/utils/uuid.d.mts +5 -0
- package/internal/utils/uuid.d.mts.map +1 -0
- package/internal/utils/uuid.d.ts +5 -0
- package/internal/utils/uuid.d.ts.map +1 -0
- package/internal/utils/uuid.js +19 -0
- package/internal/utils/uuid.js.map +1 -0
- package/internal/utils/uuid.mjs +15 -0
- package/internal/utils/uuid.mjs.map +1 -0
- package/internal/utils/values.d.mts +18 -0
- package/internal/utils/values.d.mts.map +1 -0
- package/internal/utils/values.d.ts +18 -0
- package/internal/utils/values.d.ts.map +1 -0
- package/internal/utils/values.js +112 -0
- package/internal/utils/values.js.map +1 -0
- package/internal/utils/values.mjs +94 -0
- package/internal/utils/values.mjs.map +1 -0
- package/internal/utils.d.mts +8 -0
- package/internal/utils.d.mts.map +1 -0
- package/internal/utils.d.ts +8 -0
- package/internal/utils.d.ts.map +1 -0
- package/internal/utils.js +12 -0
- package/internal/utils.js.map +1 -0
- package/internal/utils.mjs +9 -0
- package/internal/utils.mjs.map +1 -0
- package/package.json +149 -0
- package/resource.d.mts +3 -0
- package/resource.d.mts.map +1 -0
- package/resource.d.ts +3 -0
- package/resource.d.ts.map +1 -0
- package/resource.js +6 -0
- package/resource.js.map +1 -0
- package/resource.mjs +3 -0
- package/resource.mjs.map +1 -0
- package/resources/dealers/dealers.d.mts +211 -0
- package/resources/dealers/dealers.d.mts.map +1 -0
- package/resources/dealers/dealers.d.ts +211 -0
- package/resources/dealers/dealers.d.ts.map +1 -0
- package/resources/dealers/dealers.js +77 -0
- package/resources/dealers/dealers.js.map +1 -0
- package/resources/dealers/dealers.mjs +72 -0
- package/resources/dealers/dealers.mjs.map +1 -0
- package/resources/dealers/index.d.mts +5 -0
- package/resources/dealers/index.d.mts.map +1 -0
- package/resources/dealers/index.d.ts +5 -0
- package/resources/dealers/index.d.ts.map +1 -0
- package/resources/dealers/index.js +13 -0
- package/resources/dealers/index.js.map +1 -0
- package/resources/dealers/index.mjs +6 -0
- package/resources/dealers/index.mjs.map +1 -0
- package/resources/dealers/nlt/index.d.mts +3 -0
- package/resources/dealers/nlt/index.d.mts.map +1 -0
- package/resources/dealers/nlt/index.d.ts +3 -0
- package/resources/dealers/nlt/index.d.ts.map +1 -0
- package/resources/dealers/nlt/index.js +9 -0
- package/resources/dealers/nlt/index.js.map +1 -0
- package/resources/dealers/nlt/index.mjs +4 -0
- package/resources/dealers/nlt/index.mjs.map +1 -0
- package/resources/dealers/nlt/nlt.d.mts +10 -0
- package/resources/dealers/nlt/nlt.d.mts.map +1 -0
- package/resources/dealers/nlt/nlt.d.ts +10 -0
- package/resources/dealers/nlt/nlt.d.ts.map +1 -0
- package/resources/dealers/nlt/nlt.js +17 -0
- package/resources/dealers/nlt/nlt.js.map +1 -0
- package/resources/dealers/nlt/nlt.mjs +12 -0
- package/resources/dealers/nlt/nlt.mjs.map +1 -0
- package/resources/dealers/nlt/offers.d.mts +303 -0
- package/resources/dealers/nlt/offers.d.mts.map +1 -0
- package/resources/dealers/nlt/offers.d.ts +303 -0
- package/resources/dealers/nlt/offers.d.ts.map +1 -0
- package/resources/dealers/nlt/offers.js +35 -0
- package/resources/dealers/nlt/offers.js.map +1 -0
- package/resources/dealers/nlt/offers.mjs +31 -0
- package/resources/dealers/nlt/offers.mjs.map +1 -0
- package/resources/dealers/nlt-settings.d.mts +221 -0
- package/resources/dealers/nlt-settings.d.mts.map +1 -0
- package/resources/dealers/nlt-settings.d.ts +221 -0
- package/resources/dealers/nlt-settings.d.ts.map +1 -0
- package/resources/dealers/nlt-settings.js +54 -0
- package/resources/dealers/nlt-settings.js.map +1 -0
- package/resources/dealers/nlt-settings.mjs +50 -0
- package/resources/dealers/nlt-settings.mjs.map +1 -0
- package/resources/dealers/nlt.d.mts +2 -0
- package/resources/dealers/nlt.d.mts.map +1 -0
- package/resources/dealers/nlt.d.ts +2 -0
- package/resources/dealers/nlt.d.ts.map +1 -0
- package/resources/dealers/nlt.js +6 -0
- package/resources/dealers/nlt.js.map +1 -0
- package/resources/dealers/nlt.mjs +3 -0
- package/resources/dealers/nlt.mjs.map +1 -0
- package/resources/dealers/vehicles/images.d.mts +113 -0
- package/resources/dealers/vehicles/images.d.mts.map +1 -0
- package/resources/dealers/vehicles/images.d.ts +113 -0
- package/resources/dealers/vehicles/images.d.ts.map +1 -0
- package/resources/dealers/vehicles/images.js +64 -0
- package/resources/dealers/vehicles/images.js.map +1 -0
- package/resources/dealers/vehicles/images.mjs +60 -0
- package/resources/dealers/vehicles/images.mjs.map +1 -0
- package/resources/dealers/vehicles/index.d.mts +3 -0
- package/resources/dealers/vehicles/index.d.mts.map +1 -0
- package/resources/dealers/vehicles/index.d.ts +3 -0
- package/resources/dealers/vehicles/index.d.ts.map +1 -0
- package/resources/dealers/vehicles/index.js +9 -0
- package/resources/dealers/vehicles/index.js.map +1 -0
- package/resources/dealers/vehicles/index.mjs +4 -0
- package/resources/dealers/vehicles/index.mjs.map +1 -0
- package/resources/dealers/vehicles/vehicles.d.mts +576 -0
- package/resources/dealers/vehicles/vehicles.d.mts.map +1 -0
- package/resources/dealers/vehicles/vehicles.d.ts +576 -0
- package/resources/dealers/vehicles/vehicles.d.ts.map +1 -0
- package/resources/dealers/vehicles/vehicles.js +141 -0
- package/resources/dealers/vehicles/vehicles.js.map +1 -0
- package/resources/dealers/vehicles/vehicles.mjs +136 -0
- package/resources/dealers/vehicles/vehicles.mjs.map +1 -0
- package/resources/dealers/vehicles.d.mts +2 -0
- package/resources/dealers/vehicles.d.mts.map +1 -0
- package/resources/dealers/vehicles.d.ts +2 -0
- package/resources/dealers/vehicles.d.ts.map +1 -0
- package/resources/dealers/vehicles.js +6 -0
- package/resources/dealers/vehicles.js.map +1 -0
- package/resources/dealers/vehicles.mjs +3 -0
- package/resources/dealers/vehicles.mjs.map +1 -0
- package/resources/dealers.d.mts +2 -0
- package/resources/dealers.d.mts.map +1 -0
- package/resources/dealers.d.ts +2 -0
- package/resources/dealers.d.ts.map +1 -0
- package/resources/dealers.js +6 -0
- package/resources/dealers.js.map +1 -0
- package/resources/dealers.mjs +3 -0
- package/resources/dealers.mjs.map +1 -0
- package/resources/index.d.mts +3 -0
- package/resources/index.d.mts.map +1 -0
- package/resources/index.d.ts +3 -0
- package/resources/index.d.ts.map +1 -0
- package/resources/index.js +9 -0
- package/resources/index.js.map +1 -0
- package/resources/index.mjs +4 -0
- package/resources/index.mjs.map +1 -0
- package/resources/keys.d.mts +83 -0
- package/resources/keys.d.mts.map +1 -0
- package/resources/keys.d.ts +83 -0
- package/resources/keys.d.ts.map +1 -0
- package/resources/keys.js +51 -0
- package/resources/keys.js.map +1 -0
- package/resources/keys.mjs +47 -0
- package/resources/keys.mjs.map +1 -0
- package/resources.d.mts +2 -0
- package/resources.d.mts.map +1 -0
- package/resources.d.ts +2 -0
- package/resources.d.ts.map +1 -0
- package/resources.js +5 -0
- package/resources.js.map +1 -0
- package/resources.mjs +2 -0
- package/resources.mjs.map +1 -0
- package/src/api-promise.ts +2 -0
- package/src/client.ts +841 -0
- package/src/core/README.md +3 -0
- package/src/core/api-promise.ts +92 -0
- package/src/core/error.ts +130 -0
- package/src/core/resource.ts +11 -0
- package/src/core/uploads.ts +2 -0
- package/src/error.ts +2 -0
- package/src/index.ts +22 -0
- package/src/internal/README.md +3 -0
- package/src/internal/builtin-types.ts +93 -0
- package/src/internal/detect-platform.ts +196 -0
- package/src/internal/errors.ts +33 -0
- package/src/internal/headers.ts +97 -0
- package/src/internal/parse.ts +56 -0
- package/src/internal/request-options.ts +91 -0
- package/src/internal/shim-types.ts +26 -0
- package/src/internal/shims.ts +107 -0
- package/src/internal/to-file.ts +154 -0
- package/src/internal/types.ts +93 -0
- package/src/internal/uploads.ts +187 -0
- package/src/internal/utils/base64.ts +40 -0
- package/src/internal/utils/bytes.ts +32 -0
- package/src/internal/utils/env.ts +18 -0
- package/src/internal/utils/log.ts +128 -0
- package/src/internal/utils/path.ts +88 -0
- package/src/internal/utils/query.ts +23 -0
- package/src/internal/utils/sleep.ts +3 -0
- package/src/internal/utils/uuid.ts +17 -0
- package/src/internal/utils/values.ts +105 -0
- package/src/internal/utils.ts +9 -0
- package/src/lib/.keep +4 -0
- package/src/resource.ts +2 -0
- package/src/resources/dealers/dealers.ts +348 -0
- package/src/resources/dealers/index.ts +28 -0
- package/src/resources/dealers/nlt/index.ts +11 -0
- package/src/resources/dealers/nlt/nlt.ts +29 -0
- package/src/resources/dealers/nlt/offers.ts +427 -0
- package/src/resources/dealers/nlt-settings.ts +269 -0
- package/src/resources/dealers/nlt.ts +3 -0
- package/src/resources/dealers/vehicles/images.ts +153 -0
- package/src/resources/dealers/vehicles/index.ts +25 -0
- package/src/resources/dealers/vehicles/vehicles.ts +796 -0
- package/src/resources/dealers/vehicles.ts +3 -0
- package/src/resources/dealers.ts +3 -0
- package/src/resources/index.ts +12 -0
- package/src/resources/keys.ts +128 -0
- package/src/resources.ts +1 -0
- package/src/tsconfig.json +11 -0
- package/src/uploads.ts +2 -0
- package/src/version.ts +1 -0
- package/uploads.d.mts +3 -0
- package/uploads.d.mts.map +1 -0
- package/uploads.d.ts +3 -0
- package/uploads.d.ts.map +1 -0
- package/uploads.js +6 -0
- package/uploads.js.map +1 -0
- package/uploads.mjs +3 -0
- package/uploads.mjs.map +1 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import { APIResource } from '../../../core/resource';
|
|
4
|
+
import { APIPromise } from '../../../core/api-promise';
|
|
5
|
+
import { RequestOptions } from '../../../internal/request-options';
|
|
6
|
+
import { path } from '../../../internal/utils/path';
|
|
7
|
+
|
|
8
|
+
export class Offers extends APIResource {
|
|
9
|
+
/**
|
|
10
|
+
* Full offer detail. Payload shape mirrors apimax MCP `get_nlt_offer_details`
|
|
11
|
+
* bit-for-bit (mcp_server.py:1546-1606).
|
|
12
|
+
*/
|
|
13
|
+
retrieve(
|
|
14
|
+
offerID: string,
|
|
15
|
+
params: OfferRetrieveParams,
|
|
16
|
+
options?: RequestOptions,
|
|
17
|
+
): APIPromise<OfferRetrieveResponse> {
|
|
18
|
+
const { dealer_id } = params;
|
|
19
|
+
return this._client.get(path`/v1/dealers/${dealer_id}/nlt/offers/${offerID}`, options);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Listing of NLT offers with monthly canon repriced for this dealer.
|
|
24
|
+
*
|
|
25
|
+
* Strategy:
|
|
26
|
+
*
|
|
27
|
+
* 1. Resolve + ACL the dealer.
|
|
28
|
+
* 2. Pull at most `limit + 1` offers from the catalog after the cursor. The extra
|
|
29
|
+
* row lets us know if there's a next page without a second COUNT(\*) query.
|
|
30
|
+
* 3. Apply text/enum filters server-side via SQL where possible (brand, segment,
|
|
31
|
+
* fuel) and the numeric `canone_max_eur` filter in Python after the pricing
|
|
32
|
+
* pass (the DB has no "displayed canon" column; we synthesize it per dealer).
|
|
33
|
+
* 4. For each surviving offer, price the (duration, km) cells the caller filtered
|
|
34
|
+
* to (if specified) or all 18, pick the cheapest cell as the headline.
|
|
35
|
+
*/
|
|
36
|
+
list(
|
|
37
|
+
dealerID: string,
|
|
38
|
+
query: OfferListParams | null | undefined = {},
|
|
39
|
+
options?: RequestOptions,
|
|
40
|
+
): APIPromise<OfferListResponse> {
|
|
41
|
+
return this._client.get(path`/v1/dealers/${dealerID}/nlt/offers`, { query, ...options });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Single row in the offers list. Pricing is dealer-aware.
|
|
47
|
+
*
|
|
48
|
+
* Field names: American English snake_case. Values: Italian raw, apimax-aligned
|
|
49
|
+
* (`fuel_type: "Benzina"`, `segment: "SUV piccoli"`). No enum normalization —
|
|
50
|
+
* apimax labels are surfaced verbatim, exactly as the detail endpoint does, so the
|
|
51
|
+
* partner client sees the same string in both listing and detail.
|
|
52
|
+
*/
|
|
53
|
+
export interface NltOfferSummary {
|
|
54
|
+
brand: string;
|
|
55
|
+
|
|
56
|
+
dealer_id: string;
|
|
57
|
+
|
|
58
|
+
duration_months: number;
|
|
59
|
+
|
|
60
|
+
km_per_year_at_quote: number;
|
|
61
|
+
|
|
62
|
+
model: string;
|
|
63
|
+
|
|
64
|
+
monthly_canon_from_eur: number;
|
|
65
|
+
|
|
66
|
+
offer_id: string;
|
|
67
|
+
|
|
68
|
+
slug: string;
|
|
69
|
+
|
|
70
|
+
vat_treatment: 'private' | 'business';
|
|
71
|
+
|
|
72
|
+
canonical_url?: string | null;
|
|
73
|
+
|
|
74
|
+
fuel_type?: string | null;
|
|
75
|
+
|
|
76
|
+
has_promo?: boolean;
|
|
77
|
+
|
|
78
|
+
image_url?: string | null;
|
|
79
|
+
|
|
80
|
+
segment?: string | null;
|
|
81
|
+
|
|
82
|
+
trim?: string | null;
|
|
83
|
+
|
|
84
|
+
vehicle_type?: 'auto' | 'vcom';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Full offer detail.
|
|
89
|
+
*
|
|
90
|
+
* Shape mirrors `_tool_get_nlt_offer_details` (apimax MCP) with all field names
|
|
91
|
+
* translated to American English snake_case for the partner SDK contract. VALUES
|
|
92
|
+
* stay Italian raw (apimax-aligned). The dict `technical_details` keeps Italian
|
|
93
|
+
* KEYS because they are `mnet_dettagli` column names (raw DB).
|
|
94
|
+
*/
|
|
95
|
+
export interface OfferRetrieveResponse {
|
|
96
|
+
found: boolean;
|
|
97
|
+
|
|
98
|
+
network_dealer_count: number;
|
|
99
|
+
|
|
100
|
+
offer_id: string;
|
|
101
|
+
|
|
102
|
+
slug: string;
|
|
103
|
+
|
|
104
|
+
title: string;
|
|
105
|
+
|
|
106
|
+
vat_included: boolean;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Container for optional add-ons (apimax: `addons_disponibili`).
|
|
110
|
+
*/
|
|
111
|
+
available_addons?: OfferRetrieveResponse.AvailableAddons;
|
|
112
|
+
|
|
113
|
+
brand?: string | null;
|
|
114
|
+
|
|
115
|
+
description_full?: string | null;
|
|
116
|
+
|
|
117
|
+
description_short?: string | null;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Three down-payment scenarios in EUR (whole amounts).
|
|
121
|
+
*
|
|
122
|
+
* apimax: `anticipo_scenari_eur` (keys remapped to American English snake_case for
|
|
123
|
+
* partnermax SDK: `zero/medium/standard`).
|
|
124
|
+
*/
|
|
125
|
+
down_payment_scenarios_eur?: OfferRetrieveResponse.DownPaymentScenariosEur | null;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Italian labels paired 1:1 with `NltDownPaymentScenariosEur`.
|
|
129
|
+
*
|
|
130
|
+
* apimax: `anticipo_scenari_labels` — used by Custom GPT to render the three
|
|
131
|
+
* options in conversation. Values stay in Italian raw ("Senza anticipo" /
|
|
132
|
+
* "Anticipo 12,5%" / "Anticipo 25%").
|
|
133
|
+
*/
|
|
134
|
+
down_payment_scenarios_labels?: OfferRetrieveResponse.DownPaymentScenariosLabels | null;
|
|
135
|
+
|
|
136
|
+
faqs?: Array<OfferRetrieveResponse.Faq>;
|
|
137
|
+
|
|
138
|
+
fuel_type?: string | null;
|
|
139
|
+
|
|
140
|
+
gallery?: Array<OfferRetrieveResponse.Gallery>;
|
|
141
|
+
|
|
142
|
+
image_url?: string | null;
|
|
143
|
+
|
|
144
|
+
included_accessories?: Array<OfferRetrieveResponse.IncludedAccessory>;
|
|
145
|
+
|
|
146
|
+
included_services?: Array<OfferRetrieveResponse.IncludedService>;
|
|
147
|
+
|
|
148
|
+
last_modified?: string | null;
|
|
149
|
+
|
|
150
|
+
min_monthly_canon_eur?: number | null;
|
|
151
|
+
|
|
152
|
+
model?: string | null;
|
|
153
|
+
|
|
154
|
+
network_offers?: Array<OfferRetrieveResponse.NetworkOffer>;
|
|
155
|
+
|
|
156
|
+
primary_dealer_city?: string | null;
|
|
157
|
+
|
|
158
|
+
primary_dealer_name?: string | null;
|
|
159
|
+
|
|
160
|
+
primary_dealer_province?: string | null;
|
|
161
|
+
|
|
162
|
+
private_only?: boolean | null;
|
|
163
|
+
|
|
164
|
+
quotations?: Array<OfferRetrieveResponse.Quotation>;
|
|
165
|
+
|
|
166
|
+
schema_org?: { [key: string]: unknown } | null;
|
|
167
|
+
|
|
168
|
+
segment?: string | null;
|
|
169
|
+
|
|
170
|
+
standard_equipment?: Array<string>;
|
|
171
|
+
|
|
172
|
+
tags?: Array<OfferRetrieveResponse.Tag>;
|
|
173
|
+
|
|
174
|
+
technical_details?: { [key: string]: unknown };
|
|
175
|
+
|
|
176
|
+
total_price_eur?: number | null;
|
|
177
|
+
|
|
178
|
+
transmission?: string | null;
|
|
179
|
+
|
|
180
|
+
trim?: string | null;
|
|
181
|
+
|
|
182
|
+
vehicle_type?: 'auto' | 'vcom';
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export namespace OfferRetrieveResponse {
|
|
186
|
+
/**
|
|
187
|
+
* Container for optional add-ons (apimax: `addons_disponibili`).
|
|
188
|
+
*/
|
|
189
|
+
export interface AvailableAddons {
|
|
190
|
+
/**
|
|
191
|
+
* Replacement-vehicle add-on lookup (apimax:
|
|
192
|
+
* `addons_disponibili.auto_sostitutiva`).
|
|
193
|
+
*
|
|
194
|
+
* Always category B (utilitaria) per founder decision — the spoken "average
|
|
195
|
+
* customer" segment.
|
|
196
|
+
*/
|
|
197
|
+
replacement_vehicle?: AvailableAddons.ReplacementVehicle | null;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Tyre-replacement add-on lookup (apimax: `addons_disponibili.pneumatici`).
|
|
201
|
+
*
|
|
202
|
+
* Populated when `mnet_dettagli.pneumatici_anteriori` matches `R\d+` and a row
|
|
203
|
+
* exists in `nlt_pneumatici` for that diameter. Null otherwise. Replacement rule
|
|
204
|
+
* (founder decision 2026-05-12): 1 set of 4 tyres every 30 000 km, rounded up.
|
|
205
|
+
*/
|
|
206
|
+
tires?: AvailableAddons.Tires | null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export namespace AvailableAddons {
|
|
210
|
+
/**
|
|
211
|
+
* Replacement-vehicle add-on lookup (apimax:
|
|
212
|
+
* `addons_disponibili.auto_sostitutiva`).
|
|
213
|
+
*
|
|
214
|
+
* Always category B (utilitaria) per founder decision — the spoken "average
|
|
215
|
+
* customer" segment.
|
|
216
|
+
*/
|
|
217
|
+
export interface ReplacementVehicle {
|
|
218
|
+
category_description: string;
|
|
219
|
+
|
|
220
|
+
default_category: string;
|
|
221
|
+
|
|
222
|
+
monthly_cost_eur: number;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Tyre-replacement add-on lookup (apimax: `addons_disponibili.pneumatici`).
|
|
227
|
+
*
|
|
228
|
+
* Populated when `mnet_dettagli.pneumatici_anteriori` matches `R\d+` and a row
|
|
229
|
+
* exists in `nlt_pneumatici` for that diameter. Null otherwise. Replacement rule
|
|
230
|
+
* (founder decision 2026-05-12): 1 set of 4 tyres every 30 000 km, rounded up.
|
|
231
|
+
*/
|
|
232
|
+
export interface Tires {
|
|
233
|
+
diameter_in: number;
|
|
234
|
+
|
|
235
|
+
replacement_rule: string;
|
|
236
|
+
|
|
237
|
+
set_cost_eur: number;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Three down-payment scenarios in EUR (whole amounts).
|
|
243
|
+
*
|
|
244
|
+
* apimax: `anticipo_scenari_eur` (keys remapped to American English snake_case for
|
|
245
|
+
* partnermax SDK: `zero/medium/standard`).
|
|
246
|
+
*/
|
|
247
|
+
export interface DownPaymentScenariosEur {
|
|
248
|
+
medium: number;
|
|
249
|
+
|
|
250
|
+
standard: number;
|
|
251
|
+
|
|
252
|
+
zero: number;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Italian labels paired 1:1 with `NltDownPaymentScenariosEur`.
|
|
257
|
+
*
|
|
258
|
+
* apimax: `anticipo_scenari_labels` — used by Custom GPT to render the three
|
|
259
|
+
* options in conversation. Values stay in Italian raw ("Senza anticipo" /
|
|
260
|
+
* "Anticipo 12,5%" / "Anticipo 25%").
|
|
261
|
+
*/
|
|
262
|
+
export interface DownPaymentScenariosLabels {
|
|
263
|
+
medium: string;
|
|
264
|
+
|
|
265
|
+
standard: string;
|
|
266
|
+
|
|
267
|
+
zero: string;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* One Italian Q&A entry derived per-offer.
|
|
272
|
+
*
|
|
273
|
+
* apimax: `build_offer_faqs` in `seo_engine/nlt_faq_builder.py` — generates up to
|
|
274
|
+
* ~11 Q&A pairs (dimensions, fuel, transmission, CO2, monthly canon at preset
|
|
275
|
+
* combo, available durations, VAT inclusion, down-payment tiers, etc.). Partnermax
|
|
276
|
+
* surfaces them all, 1:1.
|
|
277
|
+
*/
|
|
278
|
+
export interface Faq {
|
|
279
|
+
answer: string;
|
|
280
|
+
|
|
281
|
+
question: string;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* One image in the offer gallery (apimax: `gallery[]`).
|
|
286
|
+
*/
|
|
287
|
+
export interface Gallery {
|
|
288
|
+
is_cover: boolean;
|
|
289
|
+
|
|
290
|
+
url: string;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* One accessory bundled with the offer (apimax: `accessori_inclusi[]`).
|
|
295
|
+
*/
|
|
296
|
+
export interface IncludedAccessory {
|
|
297
|
+
code: string;
|
|
298
|
+
|
|
299
|
+
description: string;
|
|
300
|
+
|
|
301
|
+
extra_price_eur: number;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* One NLT service normally included in the canone.
|
|
306
|
+
*
|
|
307
|
+
* apimax: `_get_services_included` (`nlt_resolver.py:719`). Source is the global
|
|
308
|
+
* `nlt_services` table (active rows only). Same set of services across the network
|
|
309
|
+
* (Assicurazione RCA / Kasco / Incendio-Furto, Manutenzione, Assistenza Stradale,
|
|
310
|
+
* Bollo, Pneumatici, Veicolo in anticipo, Vettura sostitutiva). Not per-offer.
|
|
311
|
+
*/
|
|
312
|
+
export interface IncludedService {
|
|
313
|
+
name: string;
|
|
314
|
+
|
|
315
|
+
description?: string | null;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* One network dealer's quote for this offer (apimax: `network_offers[]`).
|
|
320
|
+
*
|
|
321
|
+
* Sorted by `min_monthly_canon_eur ASC`. In partnermax this list is scoped to
|
|
322
|
+
* dealers owned by the calling partner (`utenti.parent_id = partner.user_id`) —
|
|
323
|
+
* same shape as the apimax cross-network list, partner-scoped to avoid data
|
|
324
|
+
* leakage.
|
|
325
|
+
*/
|
|
326
|
+
export interface NetworkOffer {
|
|
327
|
+
dealer_id: number;
|
|
328
|
+
|
|
329
|
+
dealer_name: string;
|
|
330
|
+
|
|
331
|
+
min_monthly_canon_eur: number;
|
|
332
|
+
|
|
333
|
+
city?: string | null;
|
|
334
|
+
|
|
335
|
+
contact_url?: string | null;
|
|
336
|
+
|
|
337
|
+
google_maps_url?: string | null;
|
|
338
|
+
|
|
339
|
+
phone?: string | null;
|
|
340
|
+
|
|
341
|
+
province?: string | null;
|
|
342
|
+
|
|
343
|
+
rating_value?: number | null;
|
|
344
|
+
|
|
345
|
+
review_count?: number | null;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* One priced cell of the 18-combination matrix.
|
|
350
|
+
*
|
|
351
|
+
* apimax: `quotazioni[]` entry — `_compute_quotazioni_dealer_aware`
|
|
352
|
+
* (mcp_server.py:180). Reflects the dealer's vetrina formula applied to each
|
|
353
|
+
* (durata, km) combo; cells with implausible canon (<€50) are dropped upstream, so
|
|
354
|
+
* the list may contain fewer than 18 rows.
|
|
355
|
+
*/
|
|
356
|
+
export interface Quotation {
|
|
357
|
+
duration_months: number;
|
|
358
|
+
|
|
359
|
+
km_per_year: number;
|
|
360
|
+
|
|
361
|
+
monthly_canon_eur: number;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Category tag for an offer (apimax: `tags[]`).
|
|
366
|
+
*
|
|
367
|
+
* Populated from `nlt_offerta_tag` ⋈ `nlt_offerte_tag`. Examples in production:
|
|
368
|
+
* "Promo", "Stock pronto", "GreenChoice".
|
|
369
|
+
*/
|
|
370
|
+
export interface Tag {
|
|
371
|
+
name: string;
|
|
372
|
+
|
|
373
|
+
color?: string | null;
|
|
374
|
+
|
|
375
|
+
icon?: string | null;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Cursor-paginated list of offer summaries.
|
|
381
|
+
*/
|
|
382
|
+
export interface OfferListResponse {
|
|
383
|
+
data: Array<NltOfferSummary>;
|
|
384
|
+
|
|
385
|
+
has_more: boolean;
|
|
386
|
+
|
|
387
|
+
next_cursor?: string | null;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
export interface OfferRetrieveParams {
|
|
391
|
+
dealer_id: string;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
export interface OfferListParams {
|
|
395
|
+
brand?: string | null;
|
|
396
|
+
|
|
397
|
+
canone_max_eur?: number | null;
|
|
398
|
+
|
|
399
|
+
cursor?: string | null;
|
|
400
|
+
|
|
401
|
+
duration_months?: number | null;
|
|
402
|
+
|
|
403
|
+
fuel_type?: string | null;
|
|
404
|
+
|
|
405
|
+
km_per_year?: number | null;
|
|
406
|
+
|
|
407
|
+
limit?: number;
|
|
408
|
+
|
|
409
|
+
segment?: string | null;
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Macro discriminator: 'auto' (passenger vehicles) or 'vcom' (light commercial ≤35
|
|
413
|
+
* q.li: vans, panel trucks, multispace, pickups, minibuses). Omit to return the
|
|
414
|
+
* mixed catalog.
|
|
415
|
+
*/
|
|
416
|
+
vehicle_type?: string | null;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export declare namespace Offers {
|
|
420
|
+
export {
|
|
421
|
+
type NltOfferSummary as NltOfferSummary,
|
|
422
|
+
type OfferRetrieveResponse as OfferRetrieveResponse,
|
|
423
|
+
type OfferListResponse as OfferListResponse,
|
|
424
|
+
type OfferRetrieveParams as OfferRetrieveParams,
|
|
425
|
+
type OfferListParams as OfferListParams,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import { APIResource } from '../../core/resource';
|
|
4
|
+
import { APIPromise } from '../../core/api-promise';
|
|
5
|
+
import { buildHeaders } from '../../internal/headers';
|
|
6
|
+
import { RequestOptions } from '../../internal/request-options';
|
|
7
|
+
import { path } from '../../internal/utils/path';
|
|
8
|
+
|
|
9
|
+
export class NltSettings extends APIResource {
|
|
10
|
+
/**
|
|
11
|
+
* Return current NLT economics for the dealer.
|
|
12
|
+
*/
|
|
13
|
+
retrieve(dealerID: string, options?: RequestOptions): APIPromise<NltSettings> {
|
|
14
|
+
return this._client.get(path`/v1/dealers/${dealerID}/nlt-settings`, options);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Set markup percent (0-10) and three down-payment tiers (strictly ascending).
|
|
19
|
+
*
|
|
20
|
+
* Validation:
|
|
21
|
+
*
|
|
22
|
+
* - `agency_markup_percent` ∈ [0, 10] (Pydantic).
|
|
23
|
+
* - `down_payment_tiers.{low,medium,high}` each
|
|
24
|
+
* `{percent_of_list (0–100), fixed_eur (≥0)}`. No strict-ascending check — the
|
|
25
|
+
* final EUR per tier is offer-dependent (`listino_imponibile * pct + eur`).
|
|
26
|
+
*
|
|
27
|
+
* Persistence:
|
|
28
|
+
*
|
|
29
|
+
* - `agency_markup_percent` → `dealer_public.nlt_agency_percent` (rounded to int;
|
|
30
|
+
* live column is `Integer NOT NULL DEFAULT 2`).
|
|
31
|
+
* - `down_payment_tiers` → `dealer_public.nlt_anticipi_config` JSONB, stored in
|
|
32
|
+
* apimax shape `[{"pct": <0..1>, "eur": <int>}, ...]`. The partner-facing
|
|
33
|
+
* `percent_of_list` (0–100) is divided by 100 to keep the column byte-compatible
|
|
34
|
+
* with the DealerMAX UI calculator that reads the same JSONB.
|
|
35
|
+
*
|
|
36
|
+
* There is NO `vat_treatment` field: VAT is per-offer (`nlt_offerte.solo_privati`)
|
|
37
|
+
* in the canonical DataMax pricing model, not per-dealer. The offer detail
|
|
38
|
+
* endpoint surfaces it per row instead.
|
|
39
|
+
*
|
|
40
|
+
* `Idempotency-Key` replay uses the shared endpoint helper; a re-applied identical
|
|
41
|
+
* PATCH is also a row-level no-op by construction.
|
|
42
|
+
*/
|
|
43
|
+
update(
|
|
44
|
+
dealerID: string,
|
|
45
|
+
params: NltSettingUpdateParams,
|
|
46
|
+
options?: RequestOptions,
|
|
47
|
+
): APIPromise<NltSettings> {
|
|
48
|
+
const { 'Idempotency-Key': idempotencyKey, ...body } = params;
|
|
49
|
+
return this._client.patch(path`/v1/dealers/${dealerID}/nlt-settings`, {
|
|
50
|
+
body,
|
|
51
|
+
...options,
|
|
52
|
+
headers: buildHeaders([
|
|
53
|
+
{ ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined) },
|
|
54
|
+
options?.headers,
|
|
55
|
+
]),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Three down-payment scenarios (basso / medio / alto).
|
|
62
|
+
*
|
|
63
|
+
* No strict-ascending validation: the final EUR amount depends on the offer's list
|
|
64
|
+
* price (`tier.percent_of_list / 100 * listino_imponibile + tier.fixed_eur`), so a
|
|
65
|
+
* tier that looks larger by % can produce a smaller EUR on cheap vehicles. Label
|
|
66
|
+
* semantics (low/medium/high) are advisory — apimax/DealerMAX UI treats the 3
|
|
67
|
+
* positions as opaque slots ordered by intent.
|
|
68
|
+
*/
|
|
69
|
+
export interface DownPaymentTiers {
|
|
70
|
+
/**
|
|
71
|
+
* One down-payment tier — percent of list price + flat EUR.
|
|
72
|
+
*
|
|
73
|
+
* apimax: `dealer_public.nlt_anticipi_config` is a JSONB list of three
|
|
74
|
+
* `{"pct": <0..1>, "eur": <int>}` entries. The final EUR applied to a deal is
|
|
75
|
+
* `listino_imponibile * pct + eur` (see
|
|
76
|
+
* `apimax/app/services/nlt/calculator.py::calcola_anticipo_eur`).
|
|
77
|
+
*
|
|
78
|
+
* Partnermax API exposes `percent_of_list` as a 0–100 number (UI-friendly: write
|
|
79
|
+
* `12.5`, not `0.125`); the router persists `pct = percent_of_list / 100` to stay
|
|
80
|
+
* byte-compatible with the DealerMAX UI calculator.
|
|
81
|
+
*/
|
|
82
|
+
high: DownPaymentTiers.High;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* One down-payment tier — percent of list price + flat EUR.
|
|
86
|
+
*
|
|
87
|
+
* apimax: `dealer_public.nlt_anticipi_config` is a JSONB list of three
|
|
88
|
+
* `{"pct": <0..1>, "eur": <int>}` entries. The final EUR applied to a deal is
|
|
89
|
+
* `listino_imponibile * pct + eur` (see
|
|
90
|
+
* `apimax/app/services/nlt/calculator.py::calcola_anticipo_eur`).
|
|
91
|
+
*
|
|
92
|
+
* Partnermax API exposes `percent_of_list` as a 0–100 number (UI-friendly: write
|
|
93
|
+
* `12.5`, not `0.125`); the router persists `pct = percent_of_list / 100` to stay
|
|
94
|
+
* byte-compatible with the DealerMAX UI calculator.
|
|
95
|
+
*/
|
|
96
|
+
low: DownPaymentTiers.Low;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* One down-payment tier — percent of list price + flat EUR.
|
|
100
|
+
*
|
|
101
|
+
* apimax: `dealer_public.nlt_anticipi_config` is a JSONB list of three
|
|
102
|
+
* `{"pct": <0..1>, "eur": <int>}` entries. The final EUR applied to a deal is
|
|
103
|
+
* `listino_imponibile * pct + eur` (see
|
|
104
|
+
* `apimax/app/services/nlt/calculator.py::calcola_anticipo_eur`).
|
|
105
|
+
*
|
|
106
|
+
* Partnermax API exposes `percent_of_list` as a 0–100 number (UI-friendly: write
|
|
107
|
+
* `12.5`, not `0.125`); the router persists `pct = percent_of_list / 100` to stay
|
|
108
|
+
* byte-compatible with the DealerMAX UI calculator.
|
|
109
|
+
*/
|
|
110
|
+
medium: DownPaymentTiers.Medium;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export namespace DownPaymentTiers {
|
|
114
|
+
/**
|
|
115
|
+
* One down-payment tier — percent of list price + flat EUR.
|
|
116
|
+
*
|
|
117
|
+
* apimax: `dealer_public.nlt_anticipi_config` is a JSONB list of three
|
|
118
|
+
* `{"pct": <0..1>, "eur": <int>}` entries. The final EUR applied to a deal is
|
|
119
|
+
* `listino_imponibile * pct + eur` (see
|
|
120
|
+
* `apimax/app/services/nlt/calculator.py::calcola_anticipo_eur`).
|
|
121
|
+
*
|
|
122
|
+
* Partnermax API exposes `percent_of_list` as a 0–100 number (UI-friendly: write
|
|
123
|
+
* `12.5`, not `0.125`); the router persists `pct = percent_of_list / 100` to stay
|
|
124
|
+
* byte-compatible with the DealerMAX UI calculator.
|
|
125
|
+
*/
|
|
126
|
+
export interface High {
|
|
127
|
+
/**
|
|
128
|
+
* Flat EUR component added on top of the percentage (e.g. promo
|
|
129
|
+
* `0% + 500 EUR fissi`). Whole euros only.
|
|
130
|
+
*/
|
|
131
|
+
fixed_eur: number;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Percentage of the IVA-excluded list price applied as down payment for this tier.
|
|
135
|
+
* Range 0–100. Typical defaults: 0 (low), 12.5 (medium), 25 (high).
|
|
136
|
+
*/
|
|
137
|
+
percent_of_list: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* One down-payment tier — percent of list price + flat EUR.
|
|
142
|
+
*
|
|
143
|
+
* apimax: `dealer_public.nlt_anticipi_config` is a JSONB list of three
|
|
144
|
+
* `{"pct": <0..1>, "eur": <int>}` entries. The final EUR applied to a deal is
|
|
145
|
+
* `listino_imponibile * pct + eur` (see
|
|
146
|
+
* `apimax/app/services/nlt/calculator.py::calcola_anticipo_eur`).
|
|
147
|
+
*
|
|
148
|
+
* Partnermax API exposes `percent_of_list` as a 0–100 number (UI-friendly: write
|
|
149
|
+
* `12.5`, not `0.125`); the router persists `pct = percent_of_list / 100` to stay
|
|
150
|
+
* byte-compatible with the DealerMAX UI calculator.
|
|
151
|
+
*/
|
|
152
|
+
export interface Low {
|
|
153
|
+
/**
|
|
154
|
+
* Flat EUR component added on top of the percentage (e.g. promo
|
|
155
|
+
* `0% + 500 EUR fissi`). Whole euros only.
|
|
156
|
+
*/
|
|
157
|
+
fixed_eur: number;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Percentage of the IVA-excluded list price applied as down payment for this tier.
|
|
161
|
+
* Range 0–100. Typical defaults: 0 (low), 12.5 (medium), 25 (high).
|
|
162
|
+
*/
|
|
163
|
+
percent_of_list: number;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* One down-payment tier — percent of list price + flat EUR.
|
|
168
|
+
*
|
|
169
|
+
* apimax: `dealer_public.nlt_anticipi_config` is a JSONB list of three
|
|
170
|
+
* `{"pct": <0..1>, "eur": <int>}` entries. The final EUR applied to a deal is
|
|
171
|
+
* `listino_imponibile * pct + eur` (see
|
|
172
|
+
* `apimax/app/services/nlt/calculator.py::calcola_anticipo_eur`).
|
|
173
|
+
*
|
|
174
|
+
* Partnermax API exposes `percent_of_list` as a 0–100 number (UI-friendly: write
|
|
175
|
+
* `12.5`, not `0.125`); the router persists `pct = percent_of_list / 100` to stay
|
|
176
|
+
* byte-compatible with the DealerMAX UI calculator.
|
|
177
|
+
*/
|
|
178
|
+
export interface Medium {
|
|
179
|
+
/**
|
|
180
|
+
* Flat EUR component added on top of the percentage (e.g. promo
|
|
181
|
+
* `0% + 500 EUR fissi`). Whole euros only.
|
|
182
|
+
*/
|
|
183
|
+
fixed_eur: number;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Percentage of the IVA-excluded list price applied as down payment for this tier.
|
|
187
|
+
* Range 0–100. Typical defaults: 0 (low), 12.5 (medium), 25 (high).
|
|
188
|
+
*/
|
|
189
|
+
percent_of_list: number;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Response model for GET / PATCH /v1/dealers/{id}/nlt-settings.
|
|
195
|
+
*
|
|
196
|
+
* Note: there is no `vat_treatment` field — VAT is a property of the offer
|
|
197
|
+
* (`nlt_offerte.solo_privati`), not of the dealer. The offer detail returns the
|
|
198
|
+
* VAT treatment per row instead.
|
|
199
|
+
*/
|
|
200
|
+
export interface NltSettings {
|
|
201
|
+
agency_markup_percent: number;
|
|
202
|
+
|
|
203
|
+
dealer_id: string;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Three down-payment scenarios (basso / medio / alto).
|
|
207
|
+
*
|
|
208
|
+
* No strict-ascending validation: the final EUR amount depends on the offer's list
|
|
209
|
+
* price (`tier.percent_of_list / 100 * listino_imponibile + tier.fixed_eur`), so a
|
|
210
|
+
* tier that looks larger by % can produce a smaller EUR on cheap vehicles. Label
|
|
211
|
+
* semantics (low/medium/high) are advisory — apimax/DealerMAX UI treats the 3
|
|
212
|
+
* positions as opaque slots ordered by intent.
|
|
213
|
+
*/
|
|
214
|
+
down_payment_tiers: DownPaymentTiers;
|
|
215
|
+
|
|
216
|
+
effective_from: string;
|
|
217
|
+
|
|
218
|
+
currency?: 'EUR';
|
|
219
|
+
|
|
220
|
+
image_mode?: 'branded' | 'scenario_locked' | 'scenario_seasonal';
|
|
221
|
+
|
|
222
|
+
image_scenario_locked?: 'mediterraneo' | 'cortina' | 'milano' | 'showroom' | 'building' | null;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export interface NltSettingUpdateParams {
|
|
226
|
+
/**
|
|
227
|
+
* Body param
|
|
228
|
+
*/
|
|
229
|
+
agency_markup_percent: number;
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Body param: Three down-payment scenarios (basso / medio / alto).
|
|
233
|
+
*
|
|
234
|
+
* No strict-ascending validation: the final EUR amount depends on the offer's list
|
|
235
|
+
* price (`tier.percent_of_list / 100 * listino_imponibile + tier.fixed_eur`), so a
|
|
236
|
+
* tier that looks larger by % can produce a smaller EUR on cheap vehicles. Label
|
|
237
|
+
* semantics (low/medium/high) are advisory — apimax/DealerMAX UI treats the 3
|
|
238
|
+
* positions as opaque slots ordered by intent.
|
|
239
|
+
*/
|
|
240
|
+
down_payment_tiers: DownPaymentTiers;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Body param
|
|
244
|
+
*/
|
|
245
|
+
currency?: 'EUR';
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Body param
|
|
249
|
+
*/
|
|
250
|
+
image_mode?: 'branded' | 'scenario_locked' | 'scenario_seasonal';
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Body param
|
|
254
|
+
*/
|
|
255
|
+
image_scenario_locked?: 'mediterraneo' | 'cortina' | 'milano' | 'showroom' | 'building' | null;
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Header param
|
|
259
|
+
*/
|
|
260
|
+
'Idempotency-Key'?: string;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export declare namespace NltSettings {
|
|
264
|
+
export {
|
|
265
|
+
type DownPaymentTiers as DownPaymentTiers,
|
|
266
|
+
type NltSettings as NltSettings,
|
|
267
|
+
type NltSettingUpdateParams as NltSettingUpdateParams,
|
|
268
|
+
};
|
|
269
|
+
}
|