@vindentech/api-client 0.3.0-next.40 → 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 (42) 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 +49 -1
  6. package/dist/generated/_permissions.d.ts.map +1 -1
  7. package/dist/generated/_permissions.js +12 -0
  8. package/dist/generated/_permissions.js.map +1 -1
  9. package/dist/generated/binding-plans/binding-plans.d.ts +64 -1
  10. package/dist/generated/binding-plans/binding-plans.d.ts.map +1 -1
  11. package/dist/generated/binding-plans/binding-plans.js +33 -0
  12. package/dist/generated/binding-plans/binding-plans.js.map +1 -1
  13. package/dist/generated/checkout/checkout.d.ts +5 -5
  14. package/dist/generated/checkout/checkout.d.ts.map +1 -1
  15. package/dist/generated/employee-assignments/employee-assignments.d.ts +26 -1
  16. package/dist/generated/employee-assignments/employee-assignments.d.ts.map +1 -1
  17. package/dist/generated/employee-assignments/employee-assignments.js +9 -0
  18. package/dist/generated/employee-assignments/employee-assignments.js.map +1 -1
  19. package/dist/generated/index.schemas.d.ts +433 -53
  20. package/dist/generated/index.schemas.d.ts.map +1 -1
  21. package/dist/generated/index.schemas.js +43 -1
  22. package/dist/generated/index.schemas.js.map +1 -1
  23. package/dist/generated/organization-contracts/organization-contracts.d.ts +59 -0
  24. package/dist/generated/organization-contracts/organization-contracts.d.ts.map +1 -0
  25. package/dist/generated/organization-contracts/organization-contracts.js +22 -0
  26. package/dist/generated/organization-contracts/organization-contracts.js.map +1 -0
  27. package/dist/generated/price-suggestion/price-suggestion.d.ts +23 -0
  28. package/dist/generated/price-suggestion/price-suggestion.d.ts.map +1 -0
  29. package/dist/generated/price-suggestion/price-suggestion.js +19 -0
  30. package/dist/generated/price-suggestion/price-suggestion.js.map +1 -0
  31. package/dist/generated/products/products.d.ts +6 -2
  32. package/dist/generated/products/products.d.ts.map +1 -1
  33. package/dist/generated/products/products.js.map +1 -1
  34. package/dist/generated/transport-options/transport-options.d.ts +72 -0
  35. package/dist/generated/transport-options/transport-options.d.ts.map +1 -0
  36. package/dist/generated/transport-options/transport-options.js +52 -0
  37. package/dist/generated/transport-options/transport-options.js.map +1 -0
  38. package/dist/generated/warehouse-orders/warehouse-orders.d.ts +15 -1
  39. package/dist/generated/warehouse-orders/warehouse-orders.d.ts.map +1 -1
  40. package/dist/generated/warehouse-orders/warehouse-orders.js +12 -0
  41. package/dist/generated/warehouse-orders/warehouse-orders.js.map +1 -1
  42. package/package.json +1 -1
@@ -402,7 +402,6 @@ export type OrderTimelineEventDtoKind = typeof OrderTimelineEventDtoKind[keyof t
402
402
  export declare const OrderTimelineEventDtoKind: {
403
403
  readonly STATUS_CHANGE: "STATUS_CHANGE";
404
404
  readonly LEG: "LEG";
405
- readonly APPOINTMENT: "APPOINTMENT";
406
405
  readonly RELATIONSHIP: "RELATIONSHIP";
407
406
  };
408
407
  export type OrderTimelineEventDtoDirection = typeof OrderTimelineEventDtoDirection[keyof typeof OrderTimelineEventDtoDirection];
@@ -504,6 +503,8 @@ export interface RescheduleOrderDto {
504
503
  preferredDate?: string;
505
504
  }
506
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. Has no effect unless recipient or address is also present. */
507
+ componentKey?: string;
507
508
  recipient?: EditOrderRecipientDto;
508
509
  address?: EditOrderAddressDto;
509
510
  /** New preferred transport date (does not re-plan capacity by itself). */
@@ -518,6 +519,13 @@ export interface EditOrderDto {
518
519
  rutDeduction?: boolean;
519
520
  /** Re-plan the named leg onto a new slot. See RescheduleOrderDto.timeslotId for the release/consume atomicity and full-slot error contract. */
520
521
  reschedule?: RescheduleOrderDto;
522
+ /** Force this edit through even though it would leave the order's own commitment past its live parent order's deadline (otherwise 409 own_commitment_infeasible — a distinct code from the non-overridable dependency_infeasible a parent edit can raise). Staff-only (platform-admin / tenant-wide staff). Requires overrideReason. Waives every live cross-order violation on this edit, not a single named parent. Recorded as an audit_logs.admin_action row whenever it actually suppresses a rejection. */
523
+ overrideDependencyGuard?: boolean;
524
+ /**
525
+ * Why the cross-order dependency guard is being overridden. Required when overrideDependencyGuard is true.
526
+ * @maxLength 2000
527
+ */
528
+ overrideReason?: string;
521
529
  }
522
530
  export interface AssignOrderWarehouseDto {
523
531
  /**
@@ -1270,6 +1278,37 @@ export declare const UpdateMemberDtoRole: {
1270
1278
  export interface UpdateMemberDto {
1271
1279
  role?: UpdateMemberDtoRole;
1272
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
+ }
1273
1312
  export type OrganizationSettingDtoServiceType = typeof OrganizationSettingDtoServiceType[keyof typeof OrganizationSettingDtoServiceType];
1274
1313
  export declare const OrganizationSettingDtoServiceType: {
1275
1314
  readonly STORAGE: "STORAGE";
@@ -2844,38 +2883,94 @@ export interface PlaceOrderResultDto {
2844
2883
  orderNumber: number;
2845
2884
  salesOrders: PlacedSalesOrderDto[];
2846
2885
  }
2847
- 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 {
2848
2896
  transportServiceId: string;
2897
+ code: string;
2849
2898
  name: string;
2850
- /** PICKUP | DELIVERY | MOVE | DROP_OFF | TRANSFER | PICKING | MERCHANDISE_SALE */
2851
- salesOrderType: string;
2852
2899
  /** DELIVERY_TIMESLOT | DISPATCH_SLOT | BOOKED */
2853
2900
  fulfilmentMode: string;
2854
- /** The zone that matched the queried zip code */
2855
- 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;
2856
2911
  }
2857
- export interface TransportSlotDto {
2858
- slotId: string;
2859
- slotDate: string;
2860
- windowStart: string;
2861
- windowEnd: string;
2912
+ export interface SlotPriceDto {
2862
2913
  /** @nullable */
2863
- orderCutoffAt: string | null;
2914
+ perM3ExVat?: string | null;
2864
2915
  /** @nullable */
2865
- priceExVat: string | null;
2916
+ perM3IncVat?: string | null;
2866
2917
  /** @nullable */
2867
- priceIncRut: string | null;
2918
+ perM3IncRut?: string | null;
2919
+ /** @nullable */
2920
+ perHourExVat?: string | null;
2921
+ /** @nullable */
2922
+ baseFeeExVat?: string | null;
2868
2923
  /** @nullable */
2869
2924
  vatRate: string | null;
2870
2925
  /** @nullable */
2871
- 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;
2872
2935
  /**
2873
- * 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
2874
2937
  * @nullable
2875
2938
  */
2876
- remainingOrders: number | null;
2877
- /** ACTIVE | CLOSED */
2878
- 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[];
2879
2974
  }
2880
2975
  export type TransportServiceDtoSalesOrderType = typeof TransportServiceDtoSalesOrderType[keyof typeof TransportServiceDtoSalesOrderType];
2881
2976
  export declare const TransportServiceDtoSalesOrderType: {
@@ -3251,7 +3346,7 @@ export interface PaginatedTransportServicePricesDto {
3251
3346
  offset: number;
3252
3347
  }
3253
3348
  /**
3254
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone.
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.
3255
3350
  * @nullable
3256
3351
  */
3257
3352
  export type ServiceZoneDtoBoundary = {
@@ -3270,7 +3365,7 @@ export interface ServiceZoneDto {
3270
3365
  /** ISO-3166-1 alpha-2 country code */
3271
3366
  countryCode: string;
3272
3367
  /**
3273
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone.
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.
3274
3369
  * @nullable
3275
3370
  */
3276
3371
  boundary: ServiceZoneDtoBoundary;
@@ -3302,7 +3397,7 @@ export interface ServiceZonePostalCodeDto {
3302
3397
  postalCode: string;
3303
3398
  }
3304
3399
  /**
3305
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone.
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.
3306
3401
  * @nullable
3307
3402
  */
3308
3403
  export type ServiceZoneDetailDtoBoundary = {
@@ -3321,7 +3416,7 @@ export interface ServiceZoneDetailDto {
3321
3416
  /** ISO-3166-1 alpha-2 country code */
3322
3417
  countryCode: string;
3323
3418
  /**
3324
- * GeoJSON Polygon/MultiPolygon, re-serialised from geography. NULL = zip-only zone.
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.
3325
3420
  * @nullable
3326
3421
  */
3327
3422
  boundary: ServiceZoneDetailDtoBoundary;
@@ -3345,7 +3440,7 @@ export interface ServiceZonePostalCodeInputDto {
3345
3440
  countryCode?: string;
3346
3441
  }
3347
3442
  /**
3348
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone.
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.
3349
3444
  * @nullable
3350
3445
  */
3351
3446
  export type CreateServiceZoneDtoBoundary = {
@@ -3360,7 +3455,7 @@ export interface CreateServiceZoneDto {
3360
3455
  /** ISO-3166-1 alpha-2 country code */
3361
3456
  countryCode: string;
3362
3457
  /**
3363
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone.
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.
3364
3459
  * @nullable
3365
3460
  */
3366
3461
  boundary?: CreateServiceZoneDtoBoundary;
@@ -3372,7 +3467,7 @@ export interface CreateServiceZoneDto {
3372
3467
  postalCodes?: ServiceZonePostalCodeInputDto[];
3373
3468
  }
3374
3469
  /**
3375
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone.
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.
3376
3471
  * @nullable
3377
3472
  */
3378
3473
  export type UpdateServiceZoneDtoBoundary = {
@@ -3386,7 +3481,7 @@ export interface UpdateServiceZoneDto {
3386
3481
  /** ISO-3166-1 alpha-2 country code */
3387
3482
  countryCode?: string;
3388
3483
  /**
3389
- * GeoJSON Polygon/MultiPolygon (RFC-7946). NULL = zip-only zone.
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.
3390
3485
  * @nullable
3391
3486
  */
3392
3487
  boundary?: UpdateServiceZoneDtoBoundary;
@@ -3453,6 +3548,8 @@ export interface SlotConfigDto {
3453
3548
  */
3454
3549
  dayMaxWeightG: number | null;
3455
3550
  generateHorizonDays: number;
3551
+ /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077). */
3552
+ orderCutoffLeadMinutes: number;
3456
3553
  status: string;
3457
3554
  createdAt: string;
3458
3555
  updatedAt: string;
@@ -3496,6 +3593,8 @@ export interface CreateSlotConfigDto {
3496
3593
  /** bigint */
3497
3594
  dayMaxWeightG?: string;
3498
3595
  generateHorizonDays?: number;
3596
+ /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077). */
3597
+ orderCutoffLeadMinutes?: number;
3499
3598
  status?: string;
3500
3599
  }
3501
3600
  export type UpdateSlotConfigDtoSlotKind = typeof UpdateSlotConfigDtoSlotKind[keyof typeof UpdateSlotConfigDtoSlotKind];
@@ -3519,6 +3618,8 @@ export interface UpdateSlotConfigDto {
3519
3618
  /** bigint */
3520
3619
  dayMaxWeightG?: string;
3521
3620
  generateHorizonDays?: number;
3621
+ /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077). */
3622
+ orderCutoffLeadMinutes?: number;
3522
3623
  status?: string;
3523
3624
  }
3524
3625
  export interface GenerateCapacityDto {
@@ -3894,6 +3995,39 @@ export interface UpdateCapacityOverrideDto {
3894
3995
  effectiveUntil?: string;
3895
3996
  isActive?: boolean;
3896
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
+ }
3897
4031
  export interface RouteDto {
3898
4032
  routeId: string;
3899
4033
  warehouseId: string;
@@ -4106,8 +4240,18 @@ export interface ArriveStopDto {
4106
4240
  export interface CompleteStopDto {
4107
4241
  /** A file_asset (kind SIGNATURE/POD) linked to the leg as proof_of_delivery. */
4108
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;
4109
4248
  /** Additional PoD photo file_asset ids. */
4110
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[];
4111
4255
  /** @maxLength 255 */
4112
4256
  recipientName?: string;
4113
4257
  /** @maxLength 1000 */
@@ -4271,6 +4415,8 @@ export interface TransportLegDto {
4271
4415
  salesOrderType: string;
4272
4416
  /** Per-job operational number (tenant sequence), denormalised from the parent sales_order (BE-1846). */
4273
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;
4274
4420
  /** transport_leg_type: PICKUP|DELIVERY|DISPATCH|RETURN|SERVICE */
4275
4421
  legType: string;
4276
4422
  legSequence: number;
@@ -4401,8 +4547,10 @@ export interface CompleteLegDto {
4401
4547
  reason?: string;
4402
4548
  /** When the event occurred (client clock). */
4403
4549
  occurredAt?: string;
4404
- /** 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. */
4405
4551
  proofOfDeliveryFileId?: string;
4552
+ /** An existing file_asset id linked to the leg as signature via entity_file. */
4553
+ signatureFileId?: string;
4406
4554
  }
4407
4555
  /**
4408
4556
  * Structured failure-reason code. Drives customer-fault billing attribution — omit or use an operational code to never bill.
@@ -5664,6 +5812,15 @@ export interface UpdateWarehouseOrderStatusDto {
5664
5812
  /** @maxLength 500 */
5665
5813
  comment?: string;
5666
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
+ }
5667
5824
  export interface AddWarehouseOrderProductDto {
5668
5825
  productId: string;
5669
5826
  /** @minimum 1 */
@@ -7712,6 +7869,44 @@ export interface CreateBindingPlanDto {
7712
7869
  isDefault?: boolean;
7713
7870
  changeReason?: string;
7714
7871
  }
7872
+ /**
7873
+ * Required (non-null) when discountPersistsAfterBinding is true; send null alongside discountPersistsAfterBinding:false to turn persistence off.
7874
+ * @nullable
7875
+ */
7876
+ export type UpdateBindingPlanDtoPersistentDiscountMode = typeof UpdateBindingPlanDtoPersistentDiscountMode[keyof typeof UpdateBindingPlanDtoPersistentDiscountMode] | null;
7877
+ export declare const UpdateBindingPlanDtoPersistentDiscountMode: {
7878
+ readonly frozen_at_signed_rate: "frozen_at_signed_rate";
7879
+ readonly floats_with_current_rule: "floats_with_current_rule";
7880
+ };
7881
+ /**
7882
+ * Move between draft and pending_approval only. Activation/archival are dedicated endpoints.
7883
+ */
7884
+ export type UpdateBindingPlanDtoLifecycleStatus = typeof UpdateBindingPlanDtoLifecycleStatus[keyof typeof UpdateBindingPlanDtoLifecycleStatus];
7885
+ export declare const UpdateBindingPlanDtoLifecycleStatus: {
7886
+ readonly draft: "draft";
7887
+ readonly pending_approval: "pending_approval";
7888
+ };
7889
+ export interface UpdateBindingPlanDto {
7890
+ /** Unique plan code within the tenant. Only changeable while lifecycleStatus = 'draft'. */
7891
+ code?: string;
7892
+ displayName?: string;
7893
+ /** Binding duration in months (0 = flexible / no binding). */
7894
+ durationMonths?: number;
7895
+ discountPersistsAfterBinding?: boolean;
7896
+ /**
7897
+ * Required (non-null) when discountPersistsAfterBinding is true; send null alongside discountPersistsAfterBinding:false to turn persistence off.
7898
+ * @nullable
7899
+ */
7900
+ persistentDiscountMode?: UpdateBindingPlanDtoPersistentDiscountMode;
7901
+ isDefault?: boolean;
7902
+ changeReason?: string;
7903
+ /** Move between draft and pending_approval only. Activation/archival are dedicated endpoints. */
7904
+ lifecycleStatus?: UpdateBindingPlanDtoLifecycleStatus;
7905
+ }
7906
+ export interface BindingPlanLifecycleActionDto {
7907
+ /** Optional justification for this decision. */
7908
+ changeReason?: string;
7909
+ }
7715
7910
  export interface AccountCreditDto {
7716
7911
  accountCreditId: string;
7717
7912
  tenantId: string;
@@ -8857,12 +9052,12 @@ export interface EmployeeAssignmentDto {
8857
9052
  /** @nullable */
8858
9053
  endedAt: string | null;
8859
9054
  /**
8860
- * 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.
8861
9056
  * @nullable
8862
9057
  */
8863
9058
  displayName: string | null;
8864
9059
  /**
8865
- * 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`.
8866
9061
  * @nullable
8867
9062
  */
8868
9063
  email: string | null;
@@ -8883,8 +9078,10 @@ export declare const CreateEmployeeAssignmentDtoRole: {
8883
9078
  readonly 'carrier-driver': "carrier-driver";
8884
9079
  };
8885
9080
  export interface CreateEmployeeAssignmentDto {
8886
- /** 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). */
8887
- 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;
8888
9085
  kind: CreateEmployeeAssignmentDtoKind;
8889
9086
  role: CreateEmployeeAssignmentDtoRole;
8890
9087
  /** Required for `kind=warehouse`, rejected for any other kind. */
@@ -8933,12 +9130,12 @@ export interface EmployeeAssignmentSyncResultDto {
8933
9130
  /** @nullable */
8934
9131
  endedAt: string | null;
8935
9132
  /**
8936
- * 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.
8937
9134
  * @nullable
8938
9135
  */
8939
9136
  displayName: string | null;
8940
9137
  /**
8941
- * 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`.
8942
9139
  * @nullable
8943
9140
  */
8944
9141
  email: string | null;
@@ -9139,12 +9336,6 @@ export declare const CreateNotificationRuleDtoCategory: {
9139
9336
  readonly security: "security";
9140
9337
  readonly system: "system";
9141
9338
  };
9142
- /**
9143
- * NULL falls back to the platform system template for (event, channel, locale).
9144
- */
9145
- export type CreateNotificationRuleDtoNotificationTemplateId = {
9146
- [key: string]: unknown;
9147
- };
9148
9339
  export interface CreateNotificationRuleDto {
9149
9340
  /** Must exist in the event catalog and not be retired. */
9150
9341
  eventKey: string;
@@ -9153,8 +9344,11 @@ export interface CreateNotificationRuleDto {
9153
9344
  channel: CreateNotificationRuleDtoChannel;
9154
9345
  /** Defaults to the event's category. Only operational ↔ transactional relabelling is permitted (02 §3). */
9155
9346
  category?: CreateNotificationRuleDtoCategory;
9156
- /** NULL falls back to the platform system template for (event, channel, locale). */
9157
- notificationTemplateId?: CreateNotificationRuleDtoNotificationTemplateId;
9347
+ /**
9348
+ * NULL falls back to the platform system template for (event, channel, locale).
9349
+ * @nullable
9350
+ */
9351
+ notificationTemplateId?: string | null;
9158
9352
  /** Validated against the pinned version's contractPaths at save (02 §5). */
9159
9353
  recipients: RecipientSpecDto[];
9160
9354
  }
@@ -9178,7 +9372,7 @@ export interface UpdateNotificationRuleDto {
9178
9372
  export interface EnableRuleDto {
9179
9373
  /** The estimate shown in the confirmation panel (from `GET …/recipient-estimate`). */
9180
9374
  confirmedRecipientEstimate: number;
9181
- /** 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. */
9182
9376
  typedConfirmation?: string;
9183
9377
  }
9184
9378
  export type RecipientSpecEstimateDtoKind = typeof RecipientSpecEstimateDtoKind[keyof typeof RecipientSpecEstimateDtoKind];
@@ -10841,6 +11035,92 @@ export interface SetTenantMaintenanceModeDto {
10841
11035
  /** Why this client is moving into or out of maintenance. Recorded in the admin action. */
10842
11036
  reason: string;
10843
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
+ }
10844
11124
  export type OrdersControllerListV1Params = {
10845
11125
  /**
10846
11126
  * Max rows to return (1–100).
@@ -11100,35 +11380,76 @@ export declare const ServicePointsControllerListV1Type: {
11100
11380
  };
11101
11381
  export type CheckoutControllerAvailableServicesV1Params = {
11102
11382
  /**
11103
- * Recipient zip code — resolves the service zone
11383
+ * ISO 3166-1 alpha-2 country code
11104
11384
  */
11105
- zipCode: string;
11385
+ countryCode: string;
11106
11386
  /**
11107
- * ISO 3166-1 alpha-2; defaults to the tenant's country
11387
+ * Recipient postal code — resolves the service zone
11108
11388
  */
11109
- 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;
11110
11414
  /**
11111
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.
11112
11416
  */
11113
11417
  organizationId?: string;
11114
11418
  };
11419
+ export type CheckoutControllerAvailableServicesV1CustomerType = typeof CheckoutControllerAvailableServicesV1CustomerType[keyof typeof CheckoutControllerAvailableServicesV1CustomerType];
11420
+ export declare const CheckoutControllerAvailableServicesV1CustomerType: {
11421
+ readonly business: "business";
11422
+ readonly personal: "personal";
11423
+ };
11115
11424
  export type CheckoutControllerAvailableSlotsV1Params = {
11116
11425
  /**
11117
11426
  * The chosen transport service
11118
11427
  */
11119
11428
  transportServiceId: string;
11120
11429
  /**
11121
- * Inclusive start of the slot-date range
11430
+ * The resolved service zone (from the services call)
11122
11431
  */
11123
- from: string;
11432
+ serviceZoneId: string;
11124
11433
  /**
11125
- * Inclusive end of the slot-date range
11434
+ * Inclusive start of the date range (YYYY-MM-DD)
11126
11435
  */
11127
- to: string;
11436
+ fromDate?: string;
11128
11437
  /**
11129
- * 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.
11438
+ * Inclusive end of the date range (YYYY-MM-DD)
11130
11439
  */
11131
- serviceZoneId?: string;
11440
+ toDate?: string;
11441
+ /**
11442
+ * Orders being booked; a slot must have >= this available
11443
+ */
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;
11132
11453
  /**
11133
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.
11134
11455
  */
@@ -11295,6 +11616,38 @@ export type CapacityControllerListOverridesV1Params = {
11295
11616
  */
11296
11617
  isActive?: boolean;
11297
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
+ };
11298
11651
  export type RoutesControllerListV1Params = {
11299
11652
  /**
11300
11653
  * Max rows to return (1–100).
@@ -11341,6 +11694,10 @@ export type TransportLegsControllerListV1Params = {
11341
11694
  * Filter by the parent sales order.
11342
11695
  */
11343
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;
11344
11701
  status?: TransportLegsControllerListV1Status;
11345
11702
  /**
11346
11703
  * Filter by planned-window date (YYYY-MM-DD).
@@ -11668,6 +12025,7 @@ export declare const LookupsControllerListV1Kind: {
11668
12025
  readonly 'route-stop-status': "route-stop-status";
11669
12026
  readonly 'transport-leg-status': "transport-leg-status";
11670
12027
  readonly 'order-relationship-type': "order-relationship-type";
12028
+ readonly country: "country";
11671
12029
  readonly 'sales-order-type': "sales-order-type";
11672
12030
  readonly 'warehouse-order-type': "warehouse-order-type";
11673
12031
  readonly 'carrier-kind': "carrier-kind";
@@ -11676,6 +12034,7 @@ export declare const LookupsControllerListV1Kind: {
11676
12034
  readonly 'transport-leg-type': "transport-leg-type";
11677
12035
  readonly 'transport-slot-kind': "transport-slot-kind";
11678
12036
  readonly 'organization-type': "organization-type";
12037
+ readonly 'org-contact-role': "org-contact-role";
11679
12038
  };
11680
12039
  export type IntegrationsControllerGetByIdV1200 = StripeAccountDto | FortnoxAccountDto;
11681
12040
  export type BillingAccountsControllerListAccountsV1Params = {
@@ -12315,4 +12674,25 @@ export declare const ClientConfigControllerGetV1Client: {
12315
12674
  readonly customer_app: "customer_app";
12316
12675
  readonly admin_web: "admin_web";
12317
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
+ };
12318
12698
  //# sourceMappingURL=index.schemas.d.ts.map