@vindentech/api-client 0.3.0-next.41 → 0.3.0-next.42

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 (38) hide show
  1. package/dist/generated/_all.d.ts +3 -0
  2. package/dist/generated/_all.d.ts.map +1 -1
  3. package/dist/generated/_all.js +3 -0
  4. package/dist/generated/_all.js.map +1 -1
  5. package/dist/generated/_permissions.d.ts +37 -1
  6. package/dist/generated/_permissions.d.ts.map +1 -1
  7. package/dist/generated/_permissions.js +9 -0
  8. package/dist/generated/_permissions.js.map +1 -1
  9. package/dist/generated/checkout/checkout.d.ts +5 -5
  10. package/dist/generated/checkout/checkout.d.ts.map +1 -1
  11. package/dist/generated/employee-assignments/employee-assignments.d.ts +26 -1
  12. package/dist/generated/employee-assignments/employee-assignments.d.ts.map +1 -1
  13. package/dist/generated/employee-assignments/employee-assignments.js +9 -0
  14. package/dist/generated/employee-assignments/employee-assignments.js.map +1 -1
  15. package/dist/generated/index.schemas.d.ts +381 -53
  16. package/dist/generated/index.schemas.d.ts.map +1 -1
  17. package/dist/generated/index.schemas.js +33 -0
  18. package/dist/generated/index.schemas.js.map +1 -1
  19. package/dist/generated/organization-contracts/organization-contracts.d.ts +59 -0
  20. package/dist/generated/organization-contracts/organization-contracts.d.ts.map +1 -0
  21. package/dist/generated/organization-contracts/organization-contracts.js +22 -0
  22. package/dist/generated/organization-contracts/organization-contracts.js.map +1 -0
  23. package/dist/generated/price-suggestion/price-suggestion.d.ts +23 -0
  24. package/dist/generated/price-suggestion/price-suggestion.d.ts.map +1 -0
  25. package/dist/generated/price-suggestion/price-suggestion.js +19 -0
  26. package/dist/generated/price-suggestion/price-suggestion.js.map +1 -0
  27. package/dist/generated/products/products.d.ts +6 -2
  28. package/dist/generated/products/products.d.ts.map +1 -1
  29. package/dist/generated/products/products.js.map +1 -1
  30. package/dist/generated/transport-options/transport-options.d.ts +72 -0
  31. package/dist/generated/transport-options/transport-options.d.ts.map +1 -0
  32. package/dist/generated/transport-options/transport-options.js +52 -0
  33. package/dist/generated/transport-options/transport-options.js.map +1 -0
  34. package/dist/generated/warehouse-orders/warehouse-orders.d.ts +15 -1
  35. package/dist/generated/warehouse-orders/warehouse-orders.d.ts.map +1 -1
  36. package/dist/generated/warehouse-orders/warehouse-orders.js +12 -0
  37. package/dist/generated/warehouse-orders/warehouse-orders.js.map +1 -1
  38. package/package.json +1 -1
@@ -503,7 +503,7 @@ export interface RescheduleOrderDto {
503
503
  preferredDate?: string;
504
504
  }
505
505
  export interface EditOrderDto {
506
- /** Which leg (cart_component_key, e.g. move:pickup / move:delivery / material:delivery) the recipient/address edit below targets. Omit to target the primary (lowest-sequence) leg. */
506
+ /** Which leg (cart_component_key, e.g. move:pickup / move:delivery / material:delivery) the recipient/address edit below targets. Omit to target the primary (lowest-sequence) leg. Has no effect unless recipient or address is also present. */
507
507
  componentKey?: string;
508
508
  recipient?: EditOrderRecipientDto;
509
509
  address?: EditOrderAddressDto;
@@ -1278,6 +1278,37 @@ export declare const UpdateMemberDtoRole: {
1278
1278
  export interface UpdateMemberDto {
1279
1279
  role?: UpdateMemberDtoRole;
1280
1280
  }
1281
+ export interface OrganizationContractDto {
1282
+ organizationContractId: string;
1283
+ tenantId: string;
1284
+ organizationId: string;
1285
+ /** @nullable */
1286
+ bindingType: string | null;
1287
+ /** @nullable */
1288
+ bindingPlanId: string | null;
1289
+ /** @nullable */
1290
+ bindingVolumeCm3: number | null;
1291
+ /** @nullable */
1292
+ volumeCm3: number | null;
1293
+ /** @nullable */
1294
+ billableVolumeCm3: number | null;
1295
+ /** @nullable */
1296
+ currentPeriodStart: string | null;
1297
+ /** @nullable */
1298
+ currentPeriodEnd: string | null;
1299
+ /** @nullable */
1300
+ bindingPeriodEnd: string | null;
1301
+ /** @nullable */
1302
+ insurancePlan: string | null;
1303
+ /** @nullable */
1304
+ signedAt: string | null;
1305
+ createdAt: string;
1306
+ updatedAt: string;
1307
+ }
1308
+ export interface UpdateOrganizationContractBindingDto {
1309
+ /** Target billing.binding_plan id. */
1310
+ bindingPlanId: string;
1311
+ }
1281
1312
  export type OrganizationSettingDtoServiceType = typeof OrganizationSettingDtoServiceType[keyof typeof OrganizationSettingDtoServiceType];
1282
1313
  export declare const OrganizationSettingDtoServiceType: {
1283
1314
  readonly STORAGE: "STORAGE";
@@ -2852,38 +2883,94 @@ export interface PlaceOrderResultDto {
2852
2883
  orderNumber: number;
2853
2884
  salesOrders: PlacedSalesOrderDto[];
2854
2885
  }
2855
- export interface CheckoutTransportServiceDto {
2886
+ export interface MoneyDto {
2887
+ amount: string;
2888
+ currencyCode: string;
2889
+ }
2890
+ /**
2891
+ * Lowest applicable price; null when none published
2892
+ * @nullable
2893
+ */
2894
+ export type AvailableServiceDtoFromPrice = MoneyDto | null;
2895
+ export interface AvailableServiceDto {
2856
2896
  transportServiceId: string;
2897
+ code: string;
2857
2898
  name: string;
2858
- /** PICKUP | DELIVERY | MOVE | DROP_OFF | TRANSFER | PICKING | MERCHANDISE_SALE */
2859
- salesOrderType: string;
2860
2899
  /** DELIVERY_TIMESLOT | DISPATCH_SLOT | BOOKED */
2861
2900
  fulfilmentMode: string;
2862
- /** The zone that matched the queried zip code */
2863
- serviceZoneId: string;
2901
+ /** The zone that matched the address */
2902
+ resolvedServiceZoneId: string;
2903
+ minLeadTimeHours: number;
2904
+ /**
2905
+ * Lowest applicable price; null when none published
2906
+ * @nullable
2907
+ */
2908
+ fromPrice: AvailableServiceDtoFromPrice;
2909
+ /** Whether any future capacity day/slot exists for the service+zone */
2910
+ hasSlots: boolean;
2864
2911
  }
2865
- export interface TransportSlotDto {
2866
- slotId: string;
2867
- slotDate: string;
2868
- windowStart: string;
2869
- windowEnd: string;
2912
+ export interface SlotPriceDto {
2870
2913
  /** @nullable */
2871
- orderCutoffAt: string | null;
2914
+ perM3ExVat?: string | null;
2872
2915
  /** @nullable */
2873
- priceExVat: string | null;
2916
+ perM3IncVat?: string | null;
2874
2917
  /** @nullable */
2875
- priceIncRut: string | null;
2918
+ perM3IncRut?: string | null;
2919
+ /** @nullable */
2920
+ perHourExVat?: string | null;
2921
+ /** @nullable */
2922
+ baseFeeExVat?: string | null;
2876
2923
  /** @nullable */
2877
2924
  vatRate: string | null;
2878
2925
  /** @nullable */
2879
- expressSurchargeExVat: string | null;
2926
+ currencyCode: string | null;
2927
+ }
2928
+ export interface AvailableSlotDto {
2929
+ transportSlotId: string;
2930
+ transportCapacityDayId: string;
2931
+ slotStartTime: string;
2932
+ slotEndTime: string;
2933
+ /** @nullable */
2934
+ orderCutoffAt: string | null;
2880
2935
  /**
2881
- * Orders still bookable in this slot; null = unlimited. Computed live from confirmed and unexpired held reservations, so it's a point-in-time figure, not a hold — a booking or reschedule re-checks capacity when it runs, not against a previously-read value.
2936
+ * Orders still bookable; null = unlimited
2882
2937
  * @nullable
2883
2938
  */
2884
- remainingOrders: number | null;
2885
- /** ACTIVE | CLOSED */
2886
- status: string;
2939
+ availableOrders: number | null;
2940
+ /**
2941
+ * null = unlimited
2942
+ * @nullable
2943
+ */
2944
+ availableVolumeCm3?: number | null;
2945
+ /**
2946
+ * null = unlimited
2947
+ * @nullable
2948
+ */
2949
+ availableWeightG?: number | null;
2950
+ price: SlotPriceDto;
2951
+ }
2952
+ /**
2953
+ * { amount, currencyCode }
2954
+ * @nullable
2955
+ */
2956
+ export type AvailableDayDtoLowestPrice = MoneyDto | null;
2957
+ export interface AvailableDayDto {
2958
+ slotDate: string;
2959
+ /** 0=Mon..6=Sun */
2960
+ weekday: number;
2961
+ isHoliday: boolean;
2962
+ /**
2963
+ * { amount, currencyCode }
2964
+ * @nullable
2965
+ */
2966
+ lowestPrice?: AvailableDayDtoLowestPrice;
2967
+ /** Count of qualifying slots for the day */
2968
+ availableSlots: number;
2969
+ /** Empty for daily-cap-only services */
2970
+ slots: AvailableSlotDto[];
2971
+ }
2972
+ export interface AvailableSlotsResponseDto {
2973
+ days: AvailableDayDto[];
2887
2974
  }
2888
2975
  export type TransportServiceDtoSalesOrderType = typeof TransportServiceDtoSalesOrderType[keyof typeof TransportServiceDtoSalesOrderType];
2889
2976
  export declare const TransportServiceDtoSalesOrderType: {
@@ -3259,7 +3346,7 @@ export interface PaginatedTransportServicePricesDto {
3259
3346
  offset: number;
3260
3347
  }
3261
3348
  /**
3262
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates — but no current customer-facing endpoint does (GET /v1/checkout/available-services only accepts postalCode). In practice today, only postal-code-mapped zones are ever matched at checkout; render this boundary as reference/visualization only, not as a live serviceability check (BE-1797).
3349
+ * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates. GET /v1/checkout/available-services accepts latitude+longitude (XOR with postalCode) and passes them through, so this is live at checkout, not merely reference/visualization — a zone with no mapped postal codes and only a boundary is reachable via coordinates.
3263
3350
  * @nullable
3264
3351
  */
3265
3352
  export type ServiceZoneDtoBoundary = {
@@ -3278,7 +3365,7 @@ export interface ServiceZoneDto {
3278
3365
  /** ISO-3166-1 alpha-2 country code */
3279
3366
  countryCode: string;
3280
3367
  /**
3281
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates — but no current customer-facing endpoint does (GET /v1/checkout/available-services only accepts postalCode). In practice today, only postal-code-mapped zones are ever matched at checkout; render this boundary as reference/visualization only, not as a live serviceability check (BE-1797).
3368
+ * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates. GET /v1/checkout/available-services accepts latitude+longitude (XOR with postalCode) and passes them through, so this is live at checkout, not merely reference/visualization — a zone with no mapped postal codes and only a boundary is reachable via coordinates.
3282
3369
  * @nullable
3283
3370
  */
3284
3371
  boundary: ServiceZoneDtoBoundary;
@@ -3310,7 +3397,7 @@ export interface ServiceZonePostalCodeDto {
3310
3397
  postalCode: string;
3311
3398
  }
3312
3399
  /**
3313
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates — but no current customer-facing endpoint does (GET /v1/checkout/available-services only accepts postalCode). In practice today, only postal-code-mapped zones are ever matched at checkout; render this boundary as reference/visualization only, not as a live serviceability check (BE-1797).
3400
+ * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates. GET /v1/checkout/available-services accepts latitude+longitude (XOR with postalCode) and passes them through, so this is live at checkout, not merely reference/visualization — a zone with no mapped postal codes and only a boundary is reachable via coordinates.
3314
3401
  * @nullable
3315
3402
  */
3316
3403
  export type ServiceZoneDetailDtoBoundary = {
@@ -3329,7 +3416,7 @@ export interface ServiceZoneDetailDto {
3329
3416
  /** ISO-3166-1 alpha-2 country code */
3330
3417
  countryCode: string;
3331
3418
  /**
3332
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates — but no current customer-facing endpoint does (GET /v1/checkout/available-services only accepts postalCode). In practice today, only postal-code-mapped zones are ever matched at checkout; render this boundary as reference/visualization only, not as a live serviceability check (BE-1797).
3419
+ * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone. Stored and validated, and used by resolve_service_zone() as a polygon-containment match (after exact postal-code match, before matchPriority tie-break) whenever a caller supplies coordinates. GET /v1/checkout/available-services accepts latitude+longitude (XOR with postalCode) and passes them through, so this is live at checkout, not merely reference/visualization — a zone with no mapped postal codes and only a boundary is reachable via coordinates.
3333
3420
  * @nullable
3334
3421
  */
3335
3422
  boundary: ServiceZoneDetailDtoBoundary;
@@ -3353,7 +3440,7 @@ export interface ServiceZonePostalCodeInputDto {
3353
3440
  countryCode?: string;
3354
3441
  }
3355
3442
  /**
3356
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Not currently reachable as a live matching input from any checkout endpoint — see ServiceZoneDto.boundary (BE-1797).
3443
+ * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Live matching input: GET /v1/checkout/available-services resolves the zone from caller-supplied latitude+longitude via resolve_service_zone()'s polygon-containment branch — see ServiceZoneDto.boundary.
3357
3444
  * @nullable
3358
3445
  */
3359
3446
  export type CreateServiceZoneDtoBoundary = {
@@ -3368,7 +3455,7 @@ export interface CreateServiceZoneDto {
3368
3455
  /** ISO-3166-1 alpha-2 country code */
3369
3456
  countryCode: string;
3370
3457
  /**
3371
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Not currently reachable as a live matching input from any checkout endpoint — see ServiceZoneDto.boundary (BE-1797).
3458
+ * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Live matching input: GET /v1/checkout/available-services resolves the zone from caller-supplied latitude+longitude via resolve_service_zone()'s polygon-containment branch — see ServiceZoneDto.boundary.
3372
3459
  * @nullable
3373
3460
  */
3374
3461
  boundary?: CreateServiceZoneDtoBoundary;
@@ -3380,7 +3467,7 @@ export interface CreateServiceZoneDto {
3380
3467
  postalCodes?: ServiceZonePostalCodeInputDto[];
3381
3468
  }
3382
3469
  /**
3383
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Not currently reachable as a live matching input from any checkout endpoint — see ServiceZoneDto.boundary (BE-1797).
3470
+ * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Live matching input: GET /v1/checkout/available-services resolves the zone from caller-supplied latitude+longitude via resolve_service_zone()'s polygon-containment branch — see ServiceZoneDto.boundary.
3384
3471
  * @nullable
3385
3472
  */
3386
3473
  export type UpdateServiceZoneDtoBoundary = {
@@ -3394,7 +3481,7 @@ export interface UpdateServiceZoneDto {
3394
3481
  /** ISO-3166-1 alpha-2 country code */
3395
3482
  countryCode?: string;
3396
3483
  /**
3397
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Not currently reachable as a live matching input from any checkout endpoint — see ServiceZoneDto.boundary (BE-1797).
3484
+ * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone. Live matching input: GET /v1/checkout/available-services resolves the zone from caller-supplied latitude+longitude via resolve_service_zone()'s polygon-containment branch — see ServiceZoneDto.boundary.
3398
3485
  * @nullable
3399
3486
  */
3400
3487
  boundary?: UpdateServiceZoneDtoBoundary;
@@ -3908,6 +3995,39 @@ export interface UpdateCapacityOverrideDto {
3908
3995
  effectiveUntil?: string;
3909
3996
  isActive?: boolean;
3910
3997
  }
3998
+ /**
3999
+ * @nullable
4000
+ */
4001
+ export type PriceSuggestionDtoTransportSlotId = {
4002
+ [key: string]: unknown;
4003
+ } | null;
4004
+ /**
4005
+ * @nullable
4006
+ */
4007
+ export type PriceSuggestionDtoTransportCapacityDayId = {
4008
+ [key: string]: unknown;
4009
+ } | null;
4010
+ export type PriceSuggestionDtoRationale = typeof PriceSuggestionDtoRationale[keyof typeof PriceSuggestionDtoRationale];
4011
+ export declare const PriceSuggestionDtoRationale: {
4012
+ readonly LOW_REMAINING_CAPACITY: "LOW_REMAINING_CAPACITY";
4013
+ readonly OFF_PEAK: "OFF_PEAK";
4014
+ readonly BASELINE: "BASELINE";
4015
+ };
4016
+ export interface PriceSuggestionDto {
4017
+ transportServiceId: string;
4018
+ serviceZoneId: string;
4019
+ /** @nullable */
4020
+ transportSlotId?: PriceSuggestionDtoTransportSlotId;
4021
+ /** @nullable */
4022
+ transportCapacityDayId?: PriceSuggestionDtoTransportCapacityDayId;
4023
+ /** The target's current base price */
4024
+ basePrice: MoneyDto;
4025
+ /** Non-binding recommended price */
4026
+ suggestedPrice: MoneyDto;
4027
+ /** 0..1 used/cap; 0 when uncapped */
4028
+ utilisation: number;
4029
+ rationale: PriceSuggestionDtoRationale;
4030
+ }
3911
4031
  export interface RouteDto {
3912
4032
  routeId: string;
3913
4033
  warehouseId: string;
@@ -4120,8 +4240,18 @@ export interface ArriveStopDto {
4120
4240
  export interface CompleteStopDto {
4121
4241
  /** A file_asset (kind SIGNATURE/POD) linked to the leg as proof_of_delivery. */
4122
4242
  signatureFileId?: string;
4243
+ /**
4244
+ * S3 storageKey of a pre-uploaded signature image (files upload-url flow, kind 'signature'), not yet registered as a file_asset. The command registers it (kind SIGNATURE) and links it — an alternative to signatureFileId. Mutually exclusive with signatureFileId.
4245
+ * @maxLength 1024
4246
+ */
4247
+ signatureStorageKey?: string;
4123
4248
  /** Additional PoD photo file_asset ids. */
4124
4249
  photoFileIds?: string[];
4250
+ /**
4251
+ * S3 storageKeys of pre-uploaded PoD photos (files upload-url flow, kind 'proof_of_delivery'), not yet registered as file_assets. The command registers each (kind POD) and links it — combinable with photoFileIds (not mutually exclusive).
4252
+ * @maxItems 50
4253
+ */
4254
+ photoStorageKeys?: string[];
4125
4255
  /** @maxLength 255 */
4126
4256
  recipientName?: string;
4127
4257
  /** @maxLength 1000 */
@@ -4285,6 +4415,8 @@ export interface TransportLegDto {
4285
4415
  salesOrderType: string;
4286
4416
  /** Per-job operational number (tenant sequence), denormalised from the parent sales_order (BE-1846). */
4287
4417
  jobNumber: number;
4418
+ /** The checkout/dependency bundle this leg's sales_order belongs to, denormalised from sales_order.order_group_id (BE-1804). Shared across sales_orders when a MERCHANDISE_SALE job split off the booking's own — group legs by this field, not salesOrderId, to see every leg in a booking. */
4419
+ orderGroupId: string;
4288
4420
  /** transport_leg_type: PICKUP|DELIVERY|DISPATCH|RETURN|SERVICE */
4289
4421
  legType: string;
4290
4422
  legSequence: number;
@@ -4415,8 +4547,10 @@ export interface CompleteLegDto {
4415
4547
  reason?: string;
4416
4548
  /** When the event occurred (client clock). */
4417
4549
  occurredAt?: string;
4418
- /** A file_asset id linked via entity_file. */
4550
+ /** An existing file_asset id linked to the leg as proof_of_delivery via entity_file. */
4419
4551
  proofOfDeliveryFileId?: string;
4552
+ /** An existing file_asset id linked to the leg as signature via entity_file. */
4553
+ signatureFileId?: string;
4420
4554
  }
4421
4555
  /**
4422
4556
  * Structured failure-reason code. Drives customer-fault billing attribution — omit or use an operational code to never bill.
@@ -5678,6 +5812,15 @@ export interface UpdateWarehouseOrderStatusDto {
5678
5812
  /** @maxLength 500 */
5679
5813
  comment?: string;
5680
5814
  }
5815
+ export interface CompleteReceiveDto {
5816
+ /**
5817
+ * Labor time for this receive → warehouse_order.handle_time_minutes.
5818
+ * @minimum 1
5819
+ */
5820
+ minutes: number;
5821
+ /** Complete even though some product lines are not yet HANDLED. */
5822
+ allowMissingLines?: boolean;
5823
+ }
5681
5824
  export interface AddWarehouseOrderProductDto {
5682
5825
  productId: string;
5683
5826
  /** @minimum 1 */
@@ -8909,12 +9052,12 @@ export interface EmployeeAssignmentDto {
8909
9052
  /** @nullable */
8910
9053
  endedAt: string | null;
8911
9054
  /**
8912
- * Display name of the assigned staff member, from their `user_profile`. Null when the user has no profile row yet (it is created by their first `/v1/me` call) or has not set a name.
9055
+ * Display name of the assigned staff member, from their `user_profile`. Null until they activate their account (their first `/v1/me` call sets it from their token) or if they have not set a name.
8913
9056
  * @nullable
8914
9057
  */
8915
9058
  displayName: string | null;
8916
9059
  /**
8917
- * Email of the assigned staff member, from their `user_profile`. Null when the user has no profile row yet (it is created by their first `/v1/me` call).
9060
+ * Email of the assigned staff member, from their `user_profile`. Populated at hire time — from an existing profile, or set immediately for a new email-invited hire. Null only for a row created outside this endpoint (seeded or imported) whose subject has never called `/v1/me`.
8918
9061
  * @nullable
8919
9062
  */
8920
9063
  email: string | null;
@@ -8935,8 +9078,10 @@ export declare const CreateEmployeeAssignmentDtoRole: {
8935
9078
  readonly 'carrier-driver': "carrier-driver";
8936
9079
  };
8937
9080
  export interface CreateEmployeeAssignmentDto {
8938
- /** Keycloak subject of the staff member to hire. They must already exist as a user (their `user_profile` row is created by their first `/v1/me` call). */
8939
- userSub: string;
9081
+ /** Keycloak subject of an EXISTING user to hire. Mutually exclusive with `email`. */
9082
+ userSub?: string;
9083
+ /** Email address to hire by. An existing realm user with this address is bound; otherwise a disabled-until-activated user is created and emailed an invite link. Mutually exclusive with `userSub`. */
9084
+ email?: string;
8940
9085
  kind: CreateEmployeeAssignmentDtoKind;
8941
9086
  role: CreateEmployeeAssignmentDtoRole;
8942
9087
  /** Required for `kind=warehouse`, rejected for any other kind. */
@@ -8985,12 +9130,12 @@ export interface EmployeeAssignmentSyncResultDto {
8985
9130
  /** @nullable */
8986
9131
  endedAt: string | null;
8987
9132
  /**
8988
- * Display name of the assigned staff member, from their `user_profile`. Null when the user has no profile row yet (it is created by their first `/v1/me` call) or has not set a name.
9133
+ * Display name of the assigned staff member, from their `user_profile`. Null until they activate their account (their first `/v1/me` call sets it from their token) or if they have not set a name.
8989
9134
  * @nullable
8990
9135
  */
8991
9136
  displayName: string | null;
8992
9137
  /**
8993
- * Email of the assigned staff member, from their `user_profile`. Null when the user has no profile row yet (it is created by their first `/v1/me` call).
9138
+ * Email of the assigned staff member, from their `user_profile`. Populated at hire time — from an existing profile, or set immediately for a new email-invited hire. Null only for a row created outside this endpoint (seeded or imported) whose subject has never called `/v1/me`.
8994
9139
  * @nullable
8995
9140
  */
8996
9141
  email: string | null;
@@ -9191,12 +9336,6 @@ export declare const CreateNotificationRuleDtoCategory: {
9191
9336
  readonly security: "security";
9192
9337
  readonly system: "system";
9193
9338
  };
9194
- /**
9195
- * NULL falls back to the platform system template for (event, channel, locale).
9196
- */
9197
- export type CreateNotificationRuleDtoNotificationTemplateId = {
9198
- [key: string]: unknown;
9199
- };
9200
9339
  export interface CreateNotificationRuleDto {
9201
9340
  /** Must exist in the event catalog and not be retired. */
9202
9341
  eventKey: string;
@@ -9205,8 +9344,11 @@ export interface CreateNotificationRuleDto {
9205
9344
  channel: CreateNotificationRuleDtoChannel;
9206
9345
  /** Defaults to the event's category. Only operational ↔ transactional relabelling is permitted (02 §3). */
9207
9346
  category?: CreateNotificationRuleDtoCategory;
9208
- /** NULL falls back to the platform system template for (event, channel, locale). */
9209
- notificationTemplateId?: CreateNotificationRuleDtoNotificationTemplateId;
9347
+ /**
9348
+ * NULL falls back to the platform system template for (event, channel, locale).
9349
+ * @nullable
9350
+ */
9351
+ notificationTemplateId?: string | null;
9210
9352
  /** Validated against the pinned version's contractPaths at save (02 §5). */
9211
9353
  recipients: RecipientSpecDto[];
9212
9354
  }
@@ -9230,7 +9372,7 @@ export interface UpdateNotificationRuleDto {
9230
9372
  export interface EnableRuleDto {
9231
9373
  /** The estimate shown in the confirmation panel (from `GET …/recipient-estimate`). */
9232
9374
  confirmedRecipientEstimate: number;
9233
- /** Required above the typed-confirmation threshold: the tenant slug, typed by the admin. */
9375
+ /** Required above the typed-confirmation threshold: the tenant slug, typed by the admin. Validated server-side against this tenant's slug — the same string `GET /v1/config` returns as `tenantSlug` — so the client can pre-validate before submitting. */
9234
9376
  typedConfirmation?: string;
9235
9377
  }
9236
9378
  export type RecipientSpecEstimateDtoKind = typeof RecipientSpecEstimateDtoKind[keyof typeof RecipientSpecEstimateDtoKind];
@@ -10893,6 +11035,92 @@ export interface SetTenantMaintenanceModeDto {
10893
11035
  /** Why this client is moving into or out of maintenance. Recorded in the admin action. */
10894
11036
  reason: string;
10895
11037
  }
11038
+ export type TransportOptionDtoMethodSupportedRecipientTypesItem = typeof TransportOptionDtoMethodSupportedRecipientTypesItem[keyof typeof TransportOptionDtoMethodSupportedRecipientTypesItem];
11039
+ export declare const TransportOptionDtoMethodSupportedRecipientTypesItem: {
11040
+ readonly business: "business";
11041
+ readonly personal: "personal";
11042
+ };
11043
+ export type TransportOptionDtoMethodSupportedShipmentUnitTypesItem = typeof TransportOptionDtoMethodSupportedShipmentUnitTypesItem[keyof typeof TransportOptionDtoMethodSupportedShipmentUnitTypesItem];
11044
+ export declare const TransportOptionDtoMethodSupportedShipmentUnitTypesItem: {
11045
+ readonly EPAL: "EPAL";
11046
+ readonly HALF_PALLET: "HALF_PALLET";
11047
+ readonly QUARTER_PALLET: "QUARTER_PALLET";
11048
+ readonly PARCEL: "PARCEL";
11049
+ readonly SACK: "SACK";
11050
+ readonly LOOSE_ITEM: "LOOSE_ITEM";
11051
+ readonly OTHER: "OTHER";
11052
+ };
11053
+ export interface TransportOptionDto {
11054
+ organizationTransportOptionId: string;
11055
+ organizationId: string;
11056
+ /** @nullable */
11057
+ tenantCarrierMethodId: string | null;
11058
+ active: boolean;
11059
+ /**
11060
+ * Carrier account/agreement reference
11061
+ * @nullable
11062
+ */
11063
+ agreementId: string | null;
11064
+ /** @nullable */
11065
+ bookingSoftware: string | null;
11066
+ createdAt: string;
11067
+ updatedAt: string;
11068
+ /** @nullable */
11069
+ methodName: string | null;
11070
+ /**
11071
+ * tenant_carrier_method.code
11072
+ * @nullable
11073
+ */
11074
+ methodCode: string | null;
11075
+ /**
11076
+ * The carrier-API product code
11077
+ * @nullable
11078
+ */
11079
+ methodProductCode: string | null;
11080
+ /** @nullable */
11081
+ methodMaxWeightG: number | null;
11082
+ /** @nullable */
11083
+ methodMaxLengthMm: number | null;
11084
+ /**
11085
+ * bigint
11086
+ * @nullable
11087
+ */
11088
+ methodMaxVolumeCm3: number | null;
11089
+ /** @nullable */
11090
+ methodSupportedRecipientTypes: TransportOptionDtoMethodSupportedRecipientTypesItem[] | null;
11091
+ /** @nullable */
11092
+ methodSupportedShipmentUnitTypes: TransportOptionDtoMethodSupportedShipmentUnitTypesItem[] | null;
11093
+ /** @nullable */
11094
+ methodIsActive: boolean | null;
11095
+ /**
11096
+ * tenant_carrier.name
11097
+ * @nullable
11098
+ */
11099
+ carrierName: string | null;
11100
+ }
11101
+ export interface PaginatedTransportOptionsDto {
11102
+ /** The page of rows. */
11103
+ items: TransportOptionDto[];
11104
+ /** Exact count of all rows matching the filter, pre-pagination (RLS-scoped). */
11105
+ total: number;
11106
+ /** Effective max rows applied (after defaults/clamp). */
11107
+ limit: number;
11108
+ /** Effective rows skipped applied. */
11109
+ offset: number;
11110
+ }
11111
+ export interface CreateTransportOptionDto {
11112
+ /** The organization the grant is for */
11113
+ organizationId: string;
11114
+ tenantCarrierMethodId: string;
11115
+ agreementId?: string;
11116
+ bookingSoftware?: string;
11117
+ active?: boolean;
11118
+ }
11119
+ export interface UpdateTransportOptionDto {
11120
+ agreementId?: string;
11121
+ bookingSoftware?: string;
11122
+ active?: boolean;
11123
+ }
10896
11124
  export type OrdersControllerListV1Params = {
10897
11125
  /**
10898
11126
  * Max rows to return (1–100).
@@ -11152,35 +11380,76 @@ export declare const ServicePointsControllerListV1Type: {
11152
11380
  };
11153
11381
  export type CheckoutControllerAvailableServicesV1Params = {
11154
11382
  /**
11155
- * Recipient zip code — resolves the service zone
11383
+ * ISO 3166-1 alpha-2 country code
11156
11384
  */
11157
- zipCode: string;
11385
+ countryCode: string;
11158
11386
  /**
11159
- * ISO 3166-1 alpha-2; defaults to the tenant's country
11387
+ * Recipient postal code — resolves the service zone
11160
11388
  */
11161
- countryCode?: string;
11389
+ postalCode?: string;
11390
+ /**
11391
+ * Latitude (with longitude) — resolves the zone
11392
+ */
11393
+ latitude?: number;
11394
+ /**
11395
+ * Longitude (with latitude) — resolves the zone
11396
+ */
11397
+ longitude?: number;
11398
+ /**
11399
+ * Filter to services offered to this customer type
11400
+ */
11401
+ customerType?: CheckoutControllerAvailableServicesV1CustomerType;
11402
+ /**
11403
+ * bigint — cart volume (reserved for capacity filtering)
11404
+ */
11405
+ volumeCm3?: string;
11406
+ /**
11407
+ * bigint — cart weight (reserved for capacity filtering)
11408
+ */
11409
+ weightG?: string;
11410
+ /**
11411
+ * Origin warehouse (cross-region lane)
11412
+ */
11413
+ originWarehouseId?: string;
11162
11414
  /**
11163
11415
  * Staff-only: scope the result to this customer's visibility grants instead of the caller's. Ignored when it equals the caller's own organization; 403 for a non-staff caller naming any other organization.
11164
11416
  */
11165
11417
  organizationId?: string;
11166
11418
  };
11419
+ export type CheckoutControllerAvailableServicesV1CustomerType = typeof CheckoutControllerAvailableServicesV1CustomerType[keyof typeof CheckoutControllerAvailableServicesV1CustomerType];
11420
+ export declare const CheckoutControllerAvailableServicesV1CustomerType: {
11421
+ readonly business: "business";
11422
+ readonly personal: "personal";
11423
+ };
11167
11424
  export type CheckoutControllerAvailableSlotsV1Params = {
11168
11425
  /**
11169
11426
  * The chosen transport service
11170
11427
  */
11171
11428
  transportServiceId: string;
11172
11429
  /**
11173
- * Inclusive start of the slot-date range
11430
+ * The resolved service zone (from the services call)
11431
+ */
11432
+ serviceZoneId: string;
11433
+ /**
11434
+ * Inclusive start of the date range (YYYY-MM-DD)
11174
11435
  */
11175
- from: string;
11436
+ fromDate?: string;
11176
11437
  /**
11177
- * Inclusive end of the slot-date range
11438
+ * Inclusive end of the date range (YYYY-MM-DD)
11178
11439
  */
11179
- to: string;
11440
+ toDate?: string;
11180
11441
  /**
11181
- * The recipient's service zone (from GET /available-services). The v1 checkout flow ALWAYS passes this: slots are then resolved most-specific-wins — an exact-zone slot overrides the pooled (zone-agnostic) slot for the same window (even if full), so callers get one deduped row per window. Omitting it is back-compat only: every slot for the service is listed unfiltered and both pooled + per-zone rows may appear.
11442
+ * Orders being booked; a slot must have >= this available
11182
11443
  */
11183
- serviceZoneId?: string;
11444
+ quantityOrders?: number;
11445
+ /**
11446
+ * bigint — required volume; slot must have >= this available
11447
+ */
11448
+ volumeCm3?: string;
11449
+ /**
11450
+ * bigint — required weight; slot must have >= this available
11451
+ */
11452
+ weightG?: string;
11184
11453
  /**
11185
11454
  * Staff-only: scope the result to this customer's visibility grants instead of the caller's. Ignored when it equals the caller's own organization; 403 for a non-staff caller naming any other organization.
11186
11455
  */
@@ -11347,6 +11616,38 @@ export type CapacityControllerListOverridesV1Params = {
11347
11616
  */
11348
11617
  isActive?: boolean;
11349
11618
  };
11619
+ export type PriceSuggestionControllerPriceSuggestionV1Params = {
11620
+ /**
11621
+ * The service zone the target belongs to
11622
+ */
11623
+ serviceZoneId: string;
11624
+ /**
11625
+ * Price this slot (XOR day / targetDate)
11626
+ */
11627
+ transportSlotId?: string;
11628
+ /**
11629
+ * Price this capacity day (XOR slot / targetDate)
11630
+ */
11631
+ transportCapacityDayId?: string;
11632
+ /**
11633
+ * Resolve + price the day for this date (XOR slot / day)
11634
+ */
11635
+ targetDate?: string;
11636
+ customerType?: PriceSuggestionControllerPriceSuggestionV1CustomerType;
11637
+ /**
11638
+ * bigint
11639
+ */
11640
+ volumeCm3?: string;
11641
+ /**
11642
+ * bigint
11643
+ */
11644
+ weightG?: string;
11645
+ };
11646
+ export type PriceSuggestionControllerPriceSuggestionV1CustomerType = typeof PriceSuggestionControllerPriceSuggestionV1CustomerType[keyof typeof PriceSuggestionControllerPriceSuggestionV1CustomerType];
11647
+ export declare const PriceSuggestionControllerPriceSuggestionV1CustomerType: {
11648
+ readonly business: "business";
11649
+ readonly personal: "personal";
11650
+ };
11350
11651
  export type RoutesControllerListV1Params = {
11351
11652
  /**
11352
11653
  * Max rows to return (1–100).
@@ -11393,6 +11694,10 @@ export type TransportLegsControllerListV1Params = {
11393
11694
  * Filter by the parent sales order.
11394
11695
  */
11395
11696
  salesOrderId?: string;
11697
+ /**
11698
+ * Filter by order group — the checkout/dependency bundle a sales_order belongs to (BE-1804). Groups more than one sales_order when a MERCHANDISE_SALE job split off the booking's own (e.g. a material:delivery leg re-parented onto its own job, BE-1724); lets a planning UI find every leg in a booking without an N+1 read back to sales_order.
11699
+ */
11700
+ orderGroupId?: string;
11396
11701
  status?: TransportLegsControllerListV1Status;
11397
11702
  /**
11398
11703
  * Filter by planned-window date (YYYY-MM-DD).
@@ -11720,6 +12025,7 @@ export declare const LookupsControllerListV1Kind: {
11720
12025
  readonly 'route-stop-status': "route-stop-status";
11721
12026
  readonly 'transport-leg-status': "transport-leg-status";
11722
12027
  readonly 'order-relationship-type': "order-relationship-type";
12028
+ readonly country: "country";
11723
12029
  readonly 'sales-order-type': "sales-order-type";
11724
12030
  readonly 'warehouse-order-type': "warehouse-order-type";
11725
12031
  readonly 'carrier-kind': "carrier-kind";
@@ -11728,6 +12034,7 @@ export declare const LookupsControllerListV1Kind: {
11728
12034
  readonly 'transport-leg-type': "transport-leg-type";
11729
12035
  readonly 'transport-slot-kind': "transport-slot-kind";
11730
12036
  readonly 'organization-type': "organization-type";
12037
+ readonly 'org-contact-role': "org-contact-role";
11731
12038
  };
11732
12039
  export type IntegrationsControllerGetByIdV1200 = StripeAccountDto | FortnoxAccountDto;
11733
12040
  export type BillingAccountsControllerListAccountsV1Params = {
@@ -12367,4 +12674,25 @@ export declare const ClientConfigControllerGetV1Client: {
12367
12674
  readonly customer_app: "customer_app";
12368
12675
  readonly admin_web: "admin_web";
12369
12676
  };
12677
+ export type TransportOptionsControllerListV1Params = {
12678
+ /**
12679
+ * Max rows to return (1–100).
12680
+ * @minimum 1
12681
+ * @maximum 100
12682
+ */
12683
+ limit?: number;
12684
+ /**
12685
+ * Rows to skip.
12686
+ * @minimum 0
12687
+ */
12688
+ offset?: number;
12689
+ /**
12690
+ * Staff only: view another organization's grants. Ignored for org self-service callers.
12691
+ */
12692
+ organizationId?: string;
12693
+ /**
12694
+ * Filter by active state.
12695
+ */
12696
+ active?: boolean;
12697
+ };
12370
12698
  //# sourceMappingURL=index.schemas.d.ts.map