@vindentech/api-client 1.5.0 → 1.6.0-next.1

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.
@@ -170,10 +170,20 @@ export interface OrderProductDto {
170
170
  salesOrderProductId: string;
171
171
  productId: string;
172
172
  /**
173
- * Display name — the product's placeholder_name, falling back to name.
173
+ * Display name: the product's own name when it has one, otherwise its placeholder_name. A client that labels the line in the reader's language builds the label from `productName`, `categoryId` and `placeholderName` instead: `productName`, else the category's name in that language (GET /v1/categories), else `placeholderName`.
174
174
  * @nullable
175
175
  */
176
176
  name: string | null;
177
+ /**
178
+ * The product's own name (public.product.name). Null when the customer has not named it: the line is then labelled by its category.
179
+ * @nullable
180
+ */
181
+ productName: string | null;
182
+ /**
183
+ * The text the product was checked in with (public.product.placeholder_name): its label when it has neither a name nor a category.
184
+ * @nullable
185
+ */
186
+ placeholderName: string | null;
177
187
  /**
178
188
  * Storage key of the product's primary image (never base64).
179
189
  * @nullable
@@ -2671,6 +2681,21 @@ export interface CartItemDto {
2671
2681
  productId: string | null;
2672
2682
  /** @nullable */
2673
2683
  productReference: string | null;
2684
+ /**
2685
+ * The product's own name (public.product.name), on a line that stands for a product. Null when the customer has not named it, and on an estimate line. A product line is labelled by this name, else its category's name in the reader's language (`categoryId`, GET /v1/categories), else `placeholderName`.
2686
+ * @nullable
2687
+ */
2688
+ productName: string | null;
2689
+ /**
2690
+ * The text the product was checked in with (public.product.placeholder_name). Null on an estimate line.
2691
+ * @nullable
2692
+ */
2693
+ placeholderName: string | null;
2694
+ /**
2695
+ * The product's public.category id. Null when it has none, and on an estimate line.
2696
+ * @nullable
2697
+ */
2698
+ categoryId: number | null;
2674
2699
  quantity: number;
2675
2700
  /** @nullable */
2676
2701
  lengthMm: number | null;
@@ -3800,7 +3825,7 @@ export interface UpdateTransportServiceDto {
3800
3825
  salesOrderType?: UpdateTransportServiceDtoSalesOrderType;
3801
3826
  fulfilmentMode?: UpdateTransportServiceDtoFulfilmentMode;
3802
3827
  /**
3803
- * Set null to make the service carrier-agnostic; a uuid to pin a carrier.
3828
+ * Set null to make the service carrier-agnostic; a uuid to pin a carrier. Also points the service's slots whose window has not started at it, booked or not; an order already placed keeps its leg's carrier.
3804
3829
  * @nullable
3805
3830
  */
3806
3831
  tenantCarrierId?: string | null;
@@ -4027,7 +4052,7 @@ export declare const SlotConfigDtoSlotKind: {
4027
4052
  readonly PICKUP_WINDOW: "PICKUP_WINDOW";
4028
4053
  };
4029
4054
  /**
4030
- * Per-weekday window schedule, returned as written (each window's base_max_orders, express_surcharge_ex_vat or express_surcharge_per_m3_ex_vat, and order_cutoff_lead_minutes included). A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. It applies to slots generated afterwards; existing slots keep their cutoff unless regenerated. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier.
4055
+ * Per-weekday window schedule, returned as written (each window's base_max_orders, express_surcharge_ex_vat or express_surcharge_per_m3_ex_vat, and order_cutoff_lead_minutes included). A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. A PATCH that changes a window's start or its effective lead also re-derives the cutoff of the config's slots whose window has not started, booked or not; a slot no window matches keeps its cutoff. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier; an order already placed keeps its editable_until at the edit.
4031
4056
  * @nullable
4032
4057
  */
4033
4058
  export type SlotConfigDtoWeeklySchedule = {
@@ -4048,7 +4073,7 @@ export interface SlotConfigDto {
4048
4073
  slotKind: SlotConfigDtoSlotKind;
4049
4074
  timezone: string;
4050
4075
  /**
4051
- * Per-weekday window schedule, returned as written (each window's base_max_orders, express_surcharge_ex_vat or express_surcharge_per_m3_ex_vat, and order_cutoff_lead_minutes included). A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. It applies to slots generated afterwards; existing slots keep their cutoff unless regenerated. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier.
4076
+ * Per-weekday window schedule, returned as written (each window's base_max_orders, express_surcharge_ex_vat or express_surcharge_per_m3_ex_vat, and order_cutoff_lead_minutes included). A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. A PATCH that changes a window's start or its effective lead also re-derives the cutoff of the config's slots whose window has not started, booked or not; a slot no window matches keeps its cutoff. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier; an order already placed keeps its editable_until at the edit.
4052
4077
  * @nullable
4053
4078
  */
4054
4079
  weeklySchedule: SlotConfigDtoWeeklySchedule;
@@ -4065,7 +4090,7 @@ export interface SlotConfigDto {
4065
4090
  */
4066
4091
  dayMaxWeightG: number | null;
4067
4092
  generateHorizonDays: number;
4068
- /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077), unless its weekly_schedule window sets its own order_cutoff_lead_minutes. */
4093
+ /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077), unless its weekly_schedule window sets its own order_cutoff_lead_minutes. A PATCH that changes it re-derives the cutoff of the config's slots whose window has not started and that inherit it. */
4069
4094
  orderCutoffLeadMinutes: number;
4070
4095
  status: string;
4071
4096
  createdAt: string;
@@ -4091,7 +4116,7 @@ export declare const CreateSlotConfigDtoSlotKind: {
4091
4116
  readonly PICKUP_WINDOW: "PICKUP_WINDOW";
4092
4117
  };
4093
4118
  /**
4094
- * Per-weekday windows (incl. per-slot base_max_orders / express_surcharge_ex_vat / express_surcharge_per_m3_ex_vat / order_cutoff_lead_minutes). express_surcharge_ex_vat (>= 0) is added once per order on top of the price book's base price; express_surcharge_per_m3_ex_vat (>= 0) instead adds that much per m³ the order's transport bills. A window sets at most one of the two (both is a 400). A window carries no price of its own: price_ex_vat is refused. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. It applies to slots generated afterwards; existing slots keep their cutoff unless regenerated. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier. NULL = daily-cap-only.
4119
+ * Per-weekday windows (incl. per-slot base_max_orders / express_surcharge_ex_vat / express_surcharge_per_m3_ex_vat / order_cutoff_lead_minutes). express_surcharge_ex_vat (>= 0) is added once per order on top of the price book's base price; express_surcharge_per_m3_ex_vat (>= 0) instead adds that much per m³ the order's transport bills. A window sets at most one of the two (both is a 400). A window carries no price of its own: price_ex_vat is refused. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. A PATCH that changes a window's start or its effective lead also re-derives the cutoff of the config's slots whose window has not started, booked or not; a slot no window matches keeps its cutoff. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier; an order already placed keeps its editable_until at the edit. NULL = daily-cap-only.
4095
4120
  */
4096
4121
  export type CreateSlotConfigDtoWeeklySchedule = {
4097
4122
  [key: string]: unknown;
@@ -4102,7 +4127,7 @@ export interface CreateSlotConfigDto {
4102
4127
  /** NULL = daily-cap-only (no concrete slots). */
4103
4128
  slotKind?: CreateSlotConfigDtoSlotKind;
4104
4129
  timezone?: string;
4105
- /** Per-weekday windows (incl. per-slot base_max_orders / express_surcharge_ex_vat / express_surcharge_per_m3_ex_vat / order_cutoff_lead_minutes). express_surcharge_ex_vat (>= 0) is added once per order on top of the price book's base price; express_surcharge_per_m3_ex_vat (>= 0) instead adds that much per m³ the order's transport bills. A window sets at most one of the two (both is a 400). A window carries no price of its own: price_ex_vat is refused. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. It applies to slots generated afterwards; existing slots keep their cutoff unless regenerated. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier. NULL = daily-cap-only. */
4130
+ /** Per-weekday windows (incl. per-slot base_max_orders / express_surcharge_ex_vat / express_surcharge_per_m3_ex_vat / order_cutoff_lead_minutes). express_surcharge_ex_vat (>= 0) is added once per order on top of the price book's base price; express_surcharge_per_m3_ex_vat (>= 0) instead adds that much per m³ the order's transport bills. A window sets at most one of the two (both is a 400). A window carries no price of its own: price_ex_vat is refused. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. A PATCH that changes a window's start or its effective lead also re-derives the cutoff of the config's slots whose window has not started, booked or not; a slot no window matches keeps its cutoff. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier; an order already placed keeps its editable_until at the edit. NULL = daily-cap-only. */
4106
4131
  weeklySchedule?: CreateSlotConfigDtoWeeklySchedule;
4107
4132
  dayMaxOrders?: number;
4108
4133
  /** bigint */
@@ -4110,7 +4135,7 @@ export interface CreateSlotConfigDto {
4110
4135
  /** bigint */
4111
4136
  dayMaxWeightG?: string;
4112
4137
  generateHorizonDays?: number;
4113
- /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077), unless its weekly_schedule window sets its own order_cutoff_lead_minutes. */
4138
+ /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077), unless its weekly_schedule window sets its own order_cutoff_lead_minutes. A PATCH that changes it re-derives the cutoff of the config's slots whose window has not started and that inherit it. */
4114
4139
  orderCutoffLeadMinutes?: number;
4115
4140
  status?: string;
4116
4141
  }
@@ -4121,7 +4146,7 @@ export declare const UpdateSlotConfigDtoSlotKind: {
4121
4146
  readonly PICKUP_WINDOW: "PICKUP_WINDOW";
4122
4147
  };
4123
4148
  /**
4124
- * Per-weekday windows, replacing the stored schedule; the window shape is create's. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. It applies to slots generated afterwards; existing slots keep their cutoff unless regenerated. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier.
4149
+ * Per-weekday windows, replacing the stored schedule; the window shape is create's. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. A PATCH that changes a window's start or its effective lead also re-derives the cutoff of the config's slots whose window has not started, booked or not; a slot no window matches keeps its cutoff. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier; an order already placed keeps its editable_until at the edit.
4125
4150
  */
4126
4151
  export type UpdateSlotConfigDtoWeeklySchedule = {
4127
4152
  [key: string]: unknown;
@@ -4131,7 +4156,7 @@ export interface UpdateSlotConfigDto {
4131
4156
  serviceZoneId?: string;
4132
4157
  slotKind?: UpdateSlotConfigDtoSlotKind;
4133
4158
  timezone?: string;
4134
- /** Per-weekday windows, replacing the stored schedule; the window shape is create's. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. It applies to slots generated afterwards; existing slots keep their cutoff unless regenerated. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier. */
4159
+ /** Per-weekday windows, replacing the stored schedule; the window shape is create's. A window's order_cutoff_lead_minutes (a JSON integer >= 0; absent or null = the config's orderCutoffLeadMinutes) is its own booking cutoff: its slots' order_cutoff_at = window_start − this many minutes, counted as elapsed time, so across a DST change the wall-clock cutoff moves by an hour. A PATCH that changes a window's start or its effective lead also re-derives the cutoff of the config's slots whose window has not started, booked or not; a slot no window matches keeps its cutoff. An order's editable_until is the earliest cutoff of its held slots, so a stricter window also closes order editing earlier; an order already placed keeps its editable_until at the edit. */
4135
4160
  weeklySchedule?: UpdateSlotConfigDtoWeeklySchedule;
4136
4161
  dayMaxOrders?: number;
4137
4162
  /** bigint */
@@ -4139,7 +4164,7 @@ export interface UpdateSlotConfigDto {
4139
4164
  /** bigint */
4140
4165
  dayMaxWeightG?: string;
4141
4166
  generateHorizonDays?: number;
4142
- /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077), unless its weekly_schedule window sets its own order_cutoff_lead_minutes. */
4167
+ /** Each generated slot's order_cutoff_at = window_start − this many minutes (0077), unless its weekly_schedule window sets its own order_cutoff_lead_minutes. A PATCH that changes it re-derives the cutoff of the config's slots whose window has not started and that inherit it. */
4143
4168
  orderCutoffLeadMinutes?: number;
4144
4169
  status?: string;
4145
4170
  }
@@ -5360,7 +5385,7 @@ export interface ProductDto {
5360
5385
  productId: string;
5361
5386
  organizationId: string;
5362
5387
  /**
5363
- * Catalogued product name
5388
+ * The customer's own name for the product. Null when it has none: it is then labelled by its category's name in the reader's language (`categoryId`, GET /v1/categories), else by `placeholderName`.
5364
5389
  * @nullable
5365
5390
  */
5366
5391
  name: string | null;
@@ -5480,7 +5505,7 @@ export interface CreateProductDto {
5480
5505
  /** The owning organization (server validates the caller's scope over it). */
5481
5506
  organizationId: string;
5482
5507
  /**
5483
- * Catalogued product name
5508
+ * The customer's own name for the product. Stored trimmed; a blank name is stored as null, and the product is then labelled by its category.
5484
5509
  * @maxLength 255
5485
5510
  */
5486
5511
  name: string;
@@ -5511,8 +5536,11 @@ export interface CreateProductDto {
5511
5536
  comment?: string;
5512
5537
  }
5513
5538
  export interface UpdateProductDto {
5514
- /** Catalogued product name */
5515
- name?: string;
5539
+ /**
5540
+ * The customer's own name for the product. Stored trimmed; a blank name or an explicit null clears it, and the product is then labelled by its category.
5541
+ * @nullable
5542
+ */
5543
+ name?: string | null;
5516
5544
  categoryId?: number;
5517
5545
  /**
5518
5546
  * Move the item into this folder (same organization). Explicit null moves it back to the storage root; omit to leave the folder unchanged.
@@ -13406,6 +13434,416 @@ export interface UpdateTransportOptionDto {
13406
13434
  bookingSoftware?: string;
13407
13435
  active?: boolean;
13408
13436
  }
13437
+ export interface AnalyticsStoredVolumeDto {
13438
+ /** Measured m³ in storage: the pods' recorded sizes. Reads low while a provider-run warehouse has not reported its measurements. */
13439
+ measuredM3: number;
13440
+ /**
13441
+ * Estimated m³ in storage: an unsized pod taken at its product's size. Null for a night written before the estimate existed.
13442
+ * @nullable
13443
+ */
13444
+ estimatedM3: number | null;
13445
+ /**
13446
+ * Share of the pods in storage that are measured, 0–1. Null when the night does not record it.
13447
+ * @nullable
13448
+ */
13449
+ measuredPodShare: number | null;
13450
+ }
13451
+ export interface AnalyticsVolumePerCustomerDto {
13452
+ /**
13453
+ * Null when no customer has goods in storage.
13454
+ * @nullable
13455
+ */
13456
+ measuredM3: number | null;
13457
+ /** @nullable */
13458
+ estimatedM3: number | null;
13459
+ }
13460
+ export interface AnalyticsNightsBucketDto {
13461
+ /** Stays, or customers, in the bucket. */
13462
+ count: number;
13463
+ /**
13464
+ * Average stored nights, one decimal. Null for an empty bucket.
13465
+ * @nullable
13466
+ */
13467
+ averageNights: number | null;
13468
+ }
13469
+ export interface AnalyticsNightsByStatusDto {
13470
+ /** Stored on the night. */
13471
+ active: AnalyticsNightsBucketDto;
13472
+ /** Ended: empty for `stayGapNights` consecutive nights. */
13473
+ ended: AnalyticsNightsBucketDto;
13474
+ /** Every one, including those between stays (emptied, for fewer than `stayGapNights` nights), which are in neither bucket above. */
13475
+ all: AnalyticsNightsBucketDto;
13476
+ }
13477
+ export interface AnalyticsStorageTimeDto {
13478
+ /** Per stay, by the stay's status. */
13479
+ perStay: AnalyticsNightsByStatusDto;
13480
+ /** Per customer, nights totalled across their stays, by the status of their latest stay. */
13481
+ perCustomer: AnalyticsNightsByStatusDto;
13482
+ /** Customers with exactly one stay, so returning customers are left out. */
13483
+ singleStayCustomers: AnalyticsNightsByStatusDto;
13484
+ }
13485
+ export interface AnalyticsReturningCustomersDto {
13486
+ /** Customers with two or more stays. */
13487
+ count: number;
13488
+ /**
13489
+ * Their share of the customers who have stored, 0–1. Null when none has.
13490
+ * @nullable
13491
+ */
13492
+ shareOfStoringCustomers: number | null;
13493
+ }
13494
+ export interface AnalyticsLifetimeValueDto {
13495
+ /**
13496
+ * The tenant's default currency, which lifetime revenue is counted in; revenue in any other currency is not in it. Null before the first build or for a tenant with no default currency.
13497
+ * @nullable
13498
+ */
13499
+ currencyCode: string | null;
13500
+ /**
13501
+ * Average invoiced revenue ex VAT, minor units, of the customers whose latest stay has ended.
13502
+ * @nullable
13503
+ */
13504
+ endedCustomersMinor: number | null;
13505
+ /**
13506
+ * The same over every customer who has stored.
13507
+ * @nullable
13508
+ */
13509
+ storingCustomersMinor: number | null;
13510
+ }
13511
+ export interface AnalyticsPointInTimeDto {
13512
+ /** The night these figures describe. */
13513
+ date: string;
13514
+ /** Customers with goods in storage. */
13515
+ activeCustomers: number;
13516
+ storedVolume: AnalyticsStoredVolumeDto;
13517
+ averageVolumePerActiveCustomer: AnalyticsVolumePerCustomerDto;
13518
+ /** Customers registered on or before the night, cumulative. */
13519
+ registeredCustomers: number;
13520
+ /** Customers who had stored by the night, cumulative. */
13521
+ storingCustomers: number;
13522
+ storageTime: AnalyticsStorageTimeDto;
13523
+ returningCustomers: AnalyticsReturningCustomersDto;
13524
+ averageLifetimeValue: AnalyticsLifetimeValueDto;
13525
+ }
13526
+ export interface AnalyticsPointInTimeSetDto {
13527
+ asOf: AnalyticsPointInTimeDto;
13528
+ /** The last day of the month before asOf's. */
13529
+ previousMonthEnd: AnalyticsPointInTimeDto;
13530
+ /** asOf a month earlier, clamped to that month's last day (31 Oct → 30 Sep). */
13531
+ sameDayLastMonth: AnalyticsPointInTimeDto;
13532
+ }
13533
+ export interface AnalyticsRevenueCategoryDto {
13534
+ /**
13535
+ * The article's category; null when it has none.
13536
+ * @nullable
13537
+ */
13538
+ category: string | null;
13539
+ /** Revenue ex VAT, minor units. */
13540
+ amountMinor: number;
13541
+ }
13542
+ export interface AnalyticsRevenueArticleDto {
13543
+ /**
13544
+ * Null for a row with no article.
13545
+ * @nullable
13546
+ */
13547
+ articleId: string | null;
13548
+ /** @nullable */
13549
+ code: string | null;
13550
+ /** @nullable */
13551
+ name: string | null;
13552
+ /** @nullable */
13553
+ category: string | null;
13554
+ /** Revenue ex VAT, minor units. */
13555
+ amountMinor: number;
13556
+ }
13557
+ export interface AnalyticsRevenueDto {
13558
+ currencyCode: string;
13559
+ /** Revenue ex VAT, minor units. */
13560
+ totalMinor: number;
13561
+ byCategory: AnalyticsRevenueCategoryDto[];
13562
+ byArticle: AnalyticsRevenueArticleDto[];
13563
+ }
13564
+ export interface AnalyticsPeriodDto {
13565
+ from: string;
13566
+ /** Included. */
13567
+ to: string;
13568
+ /** Customers registered in the window. */
13569
+ newRegisteredCustomers: number;
13570
+ /** Customers whose first stay started in the window. */
13571
+ newStoringCustomers: number;
13572
+ /** Invoiced revenue by invoice date, one entry per currency, never summed across currencies. Invoices sent, paid, overdue or written off; credit notes net against them. */
13573
+ revenue: AnalyticsRevenueDto[];
13574
+ }
13575
+ export interface AnalyticsPeriodSetDto {
13576
+ /** From the 1st of asOf's month through asOf. */
13577
+ monthToDate: AnalyticsPeriodDto;
13578
+ /** The same days of the month before, the last one clamped to that month's end. */
13579
+ sameDaysLastMonth: AnalyticsPeriodDto;
13580
+ /** The month before asOf's. */
13581
+ lastFullMonth: AnalyticsPeriodDto;
13582
+ /** The month before that. */
13583
+ monthBefore: AnalyticsPeriodDto;
13584
+ }
13585
+ export interface AnalyticsRevenueTotalDto {
13586
+ currencyCode: string;
13587
+ /** Revenue ex VAT, minor units. */
13588
+ totalMinor: number;
13589
+ byCategory: AnalyticsRevenueCategoryDto[];
13590
+ }
13591
+ export interface AnalyticsRevenueYearToDateDto {
13592
+ /** 1 January of asOf's year. */
13593
+ from: string;
13594
+ to: string;
13595
+ /** One entry per currency. */
13596
+ revenue: AnalyticsRevenueTotalDto[];
13597
+ }
13598
+ export interface AnalyticsPricePerM3MonthDto {
13599
+ /** First day of the service month. */
13600
+ serviceMonth: string;
13601
+ /** Storage-category revenue ex VAT for the service month, minor units. */
13602
+ storageRevenueMinor: number;
13603
+ /** Average m³ stored over the month's nights, measured. */
13604
+ averageMeasuredM3: number;
13605
+ /**
13606
+ * The same, estimated; null when no night of the month carries an estimate.
13607
+ * @nullable
13608
+ */
13609
+ averageEstimatedM3: number | null;
13610
+ /**
13611
+ * Minor units per measured m³; null when nothing measured was stored.
13612
+ * @nullable
13613
+ */
13614
+ pricePerMeasuredM3Minor: number | null;
13615
+ /**
13616
+ * Minor units per estimated m³.
13617
+ * @nullable
13618
+ */
13619
+ pricePerEstimatedM3Minor: number | null;
13620
+ }
13621
+ export interface AnalyticsPricePerM3Dto {
13622
+ currencyCode: string;
13623
+ /** The latest service month before asOf's that has invoiced storage revenue. A month has no price until it is invoiced, so the current one never appears. */
13624
+ lastInvoicedServiceMonth: AnalyticsPricePerM3MonthDto;
13625
+ /** The service month before it. */
13626
+ monthBefore: AnalyticsPricePerM3MonthDto;
13627
+ }
13628
+ export interface AnalyticsEstimateCategoryDto {
13629
+ /** @nullable */
13630
+ category: string | null;
13631
+ /** Priced charges of the window, storage projected to month end, minor units. */
13632
+ grossMinor: number;
13633
+ /** Last window's invoiced net ÷ the priced gross it was invoiced from, for this category; 1 when last window had none. Four decimals. */
13634
+ ratio: number;
13635
+ /** grossMinor × ratio, minor units. */
13636
+ estimateMinor: number;
13637
+ /** Last window's invoiced net in this category, minor units. */
13638
+ lastMonthActualMinor: number;
13639
+ }
13640
+ export interface AnalyticsEstimateCurrencyDto {
13641
+ currencyCode: string;
13642
+ /** rowsMinor + projectedMinor. */
13643
+ grossMinor: number;
13644
+ /** Priced charges of the window so far, minor units. */
13645
+ rowsMinor: number;
13646
+ /** Storage projected for the days after storageCoveredThrough, minor units. */
13647
+ projectedMinor: number;
13648
+ /** The estimate: the sum of the categories' estimates, minor units. */
13649
+ estimateMinor: number;
13650
+ /** The invoices of the previous window, net, minor units. */
13651
+ lastMonthActualMinor: number;
13652
+ byCategory: AnalyticsEstimateCategoryDto[];
13653
+ }
13654
+ export interface AnalyticsInvoiceEstimateDto {
13655
+ /** Always true: these are projections, not invoices. */
13656
+ isEstimate: boolean;
13657
+ /** The invoice window estimated: asOf's month. */
13658
+ windowFrom: string;
13659
+ windowTo: string;
13660
+ /**
13661
+ * The day storage is counted from priced charges through; later days are projected from it. Null when the window has no priced storage to project from.
13662
+ * @nullable
13663
+ */
13664
+ storageCoveredThrough: string | null;
13665
+ /** Days of storage projected. */
13666
+ projectedDays: number;
13667
+ /** False while charges of the previous window are still to be invoiced, when lastMonthActualMinor is short and the ratios rest on the invoices built so far. */
13668
+ lastMonthComplete: boolean;
13669
+ /** One entry per currency. */
13670
+ currencies: AnalyticsEstimateCurrencyDto[];
13671
+ }
13672
+ export interface AnalyticsOverviewDto {
13673
+ /** The night the figures describe. */
13674
+ asOf: string;
13675
+ /**
13676
+ * When the nightly analytics build these figures read was computed; null before the first.
13677
+ * @nullable
13678
+ */
13679
+ computedAt: string | null;
13680
+ /** Consecutive empty nights that end a storage stay. */
13681
+ stayGapNights: number;
13682
+ pointInTime: AnalyticsPointInTimeSetDto;
13683
+ periods: AnalyticsPeriodSetDto;
13684
+ revenueYearToDate: AnalyticsRevenueYearToDateDto;
13685
+ /** One entry per currency with invoiced storage. */
13686
+ averagePricePerM3: AnalyticsPricePerM3Dto[];
13687
+ estimatedInvoicesThisMonth: AnalyticsInvoiceEstimateDto;
13688
+ }
13689
+ export interface AnalyticsDailyRowDto {
13690
+ date: string;
13691
+ /** Customers with goods in storage that night. */
13692
+ activeCustomers: number;
13693
+ measuredM3: number;
13694
+ /**
13695
+ * Null for a night written before the estimate existed.
13696
+ * @nullable
13697
+ */
13698
+ estimatedM3: number | null;
13699
+ /**
13700
+ * Pods in storage with no size. Null when the night does not record it.
13701
+ * @nullable
13702
+ */
13703
+ unmeasuredPods: number | null;
13704
+ newRegisteredCustomers: number;
13705
+ /** Customers whose first stay started that day. */
13706
+ newStoringCustomers: number;
13707
+ /** Registered on or before the day, cumulative. */
13708
+ registeredCustomers: number;
13709
+ /** Had stored by the day, cumulative. */
13710
+ storingCustomers: number;
13711
+ }
13712
+ export interface AnalyticsDailyPageDto {
13713
+ items: AnalyticsDailyRowDto[];
13714
+ /**
13715
+ * Pass as `cursor` for the next page; null on the last page.
13716
+ * @nullable
13717
+ */
13718
+ nextCursor: string | null;
13719
+ }
13720
+ export type AnalyticsCustomerRowDtoOrganizationType = typeof AnalyticsCustomerRowDtoOrganizationType[keyof typeof AnalyticsCustomerRowDtoOrganizationType];
13721
+ export declare const AnalyticsCustomerRowDtoOrganizationType: {
13722
+ readonly personal: "personal";
13723
+ readonly business: "business";
13724
+ };
13725
+ export type AnalyticsCustomerRowDtoStatus = typeof AnalyticsCustomerRowDtoStatus[keyof typeof AnalyticsCustomerRowDtoStatus];
13726
+ export declare const AnalyticsCustomerRowDtoStatus: {
13727
+ readonly never_stored: "never_stored";
13728
+ readonly active: "active";
13729
+ readonly between: "between";
13730
+ readonly ended: "ended";
13731
+ };
13732
+ export interface AnalyticsCustomerRowDto {
13733
+ /** The customer's pseudonymous key, stable across builds. */
13734
+ customerKey: string;
13735
+ organizationType: AnalyticsCustomerRowDtoOrganizationType;
13736
+ registeredOn: string;
13737
+ status: AnalyticsCustomerRowDtoStatus;
13738
+ stayCount: number;
13739
+ /** Two or more stays. */
13740
+ isReturning: boolean;
13741
+ /** @nullable */
13742
+ firstStoredOn: string | null;
13743
+ totalStoredNights: number;
13744
+ /** Measured m³ in storage on the latest night built. */
13745
+ currentMeasuredM3: number;
13746
+ /** @nullable */
13747
+ currentEstimatedM3: number | null;
13748
+ /** Invoiced revenue ex VAT in currencyCode, minor units. */
13749
+ lifetimeRevenueMinor: number;
13750
+ /**
13751
+ * The tenant's default currency.
13752
+ * @nullable
13753
+ */
13754
+ currencyCode: string | null;
13755
+ }
13756
+ export interface AnalyticsCustomerPageDto {
13757
+ items: AnalyticsCustomerRowDto[];
13758
+ /**
13759
+ * Pass as `cursor` for the next page; null on the last page.
13760
+ * @nullable
13761
+ */
13762
+ nextCursor: string | null;
13763
+ }
13764
+ export type AnalyticsStayRowDtoStatus = typeof AnalyticsStayRowDtoStatus[keyof typeof AnalyticsStayRowDtoStatus];
13765
+ export declare const AnalyticsStayRowDtoStatus: {
13766
+ readonly active: "active";
13767
+ readonly between: "between";
13768
+ readonly ended: "ended";
13769
+ };
13770
+ export interface AnalyticsStayRowDto {
13771
+ customerKey: string;
13772
+ /** 1 for the customer's first stay, then 2, 3, … */
13773
+ stayNumber: number;
13774
+ startedOn: string;
13775
+ lastStoredOn: string;
13776
+ /**
13777
+ * The first of the empty nights that ended the stay; null until it has ended.
13778
+ * @nullable
13779
+ */
13780
+ endedOn: string | null;
13781
+ status: AnalyticsStayRowDtoStatus;
13782
+ /** Nights with goods in storage; empty nights inside the stay are not counted. */
13783
+ storedNights: number;
13784
+ averageMeasuredM3: number;
13785
+ peakMeasuredM3: number;
13786
+ /** @nullable */
13787
+ averageEstimatedM3: number | null;
13788
+ /** @nullable */
13789
+ peakEstimatedM3: number | null;
13790
+ }
13791
+ export interface AnalyticsStayPageDto {
13792
+ items: AnalyticsStayRowDto[];
13793
+ /**
13794
+ * Pass as `cursor` for the next page; null on the last page.
13795
+ * @nullable
13796
+ */
13797
+ nextCursor: string | null;
13798
+ }
13799
+ export interface AnalyticsCustomerMonthRowDto {
13800
+ /** First day of the month. */
13801
+ month: string;
13802
+ customerKey: string;
13803
+ /** Nights with goods in storage that month; at least 1. */
13804
+ storedNights: number;
13805
+ /** Over the stored nights. */
13806
+ averageMeasuredM3: number;
13807
+ peakMeasuredM3: number;
13808
+ /** @nullable */
13809
+ averageEstimatedM3: number | null;
13810
+ /** @nullable */
13811
+ peakEstimatedM3: number | null;
13812
+ }
13813
+ export interface AnalyticsCustomerMonthPageDto {
13814
+ items: AnalyticsCustomerMonthRowDto[];
13815
+ /**
13816
+ * Pass as `cursor` for the next page; null on the last page.
13817
+ * @nullable
13818
+ */
13819
+ nextCursor: string | null;
13820
+ }
13821
+ export interface AnalyticsRevenueRowDto {
13822
+ /** First day of the invoice's month. */
13823
+ invoiceMonth: string;
13824
+ /** First day of the month the charge was for. */
13825
+ serviceMonth: string;
13826
+ customerKey: string;
13827
+ currencyCode: string;
13828
+ /** @nullable */
13829
+ articleId: string | null;
13830
+ /** @nullable */
13831
+ articleCode: string | null;
13832
+ /** @nullable */
13833
+ articleName: string | null;
13834
+ /** @nullable */
13835
+ articleCategory: string | null;
13836
+ /** Revenue ex VAT, minor units; negative where credit notes outweigh. */
13837
+ amountMinor: number;
13838
+ }
13839
+ export interface AnalyticsRevenuePageDto {
13840
+ items: AnalyticsRevenueRowDto[];
13841
+ /**
13842
+ * Pass as `cursor` for the next page; null on the last page.
13843
+ * @nullable
13844
+ */
13845
+ nextCursor: string | null;
13846
+ }
13409
13847
  export type OrdersControllerListV1Params = {
13410
13848
  /**
13411
13849
  * Max rows to return (1–100).
@@ -14094,7 +14532,7 @@ export type ProductsControllerListV1Params = {
14094
14532
  */
14095
14533
  rootOnly?: boolean;
14096
14534
  /**
14097
- * Case-insensitive substring search over product name and external reference (accelerated by the pg_trgm GIN indexes)
14535
+ * Case-insensitive substring search over the product's name, placeholder name and external reference, and its category's name in every language (so an unnamed product is found by the category that labels it)
14098
14536
  * @maxLength 200
14099
14537
  */
14100
14538
  search?: string;
@@ -14121,7 +14559,7 @@ export type ProductsControllerStatsV1Params = {
14121
14559
  */
14122
14560
  rootOnly?: boolean;
14123
14561
  /**
14124
- * Case-insensitive substring search over product name and external reference (accelerated by the pg_trgm GIN indexes)
14562
+ * Case-insensitive substring search over the product's name, placeholder name and external reference, and its category's name in every language (so an unnamed product is found by the category that labels it)
14125
14563
  * @maxLength 200
14126
14564
  */
14127
14565
  search?: string;
@@ -15221,4 +15659,103 @@ export type TransportOptionsControllerListV1Params = {
15221
15659
  */
15222
15660
  active?: boolean;
15223
15661
  };
15662
+ export type AnalyticsControllerOverviewV1Params = {
15663
+ /**
15664
+ * The night the figures describe (YYYY-MM-DD), in the tenant's billing calendar. Defaults to the latest night the nightly analytics build covers, normally last night. A later night is 400 as_of_not_built.
15665
+ */
15666
+ asOf?: string;
15667
+ };
15668
+ export type AnalyticsControllerDailyV1Params = {
15669
+ /**
15670
+ * The `nextCursor` of the previous page. Omit for the first page.
15671
+ */
15672
+ cursor?: string;
15673
+ /**
15674
+ * Rows per page (1–5000).
15675
+ * @minimum 1
15676
+ * @maximum 5000
15677
+ */
15678
+ limit?: number;
15679
+ /**
15680
+ * First day (YYYY-MM-DD), in the billing calendar. Defaults to the 1st of the month twelve months before `to`'s. A monthly dataset covers `from`'s month.
15681
+ */
15682
+ from?: string;
15683
+ /**
15684
+ * Last day, included. Defaults to the latest night the nightly build covers. The range may span at most 25 calendar months.
15685
+ */
15686
+ to?: string;
15687
+ };
15688
+ export type AnalyticsControllerCustomersV1Params = {
15689
+ /**
15690
+ * The `nextCursor` of the previous page. Omit for the first page.
15691
+ */
15692
+ cursor?: string;
15693
+ /**
15694
+ * Rows per page (1–5000).
15695
+ * @minimum 1
15696
+ * @maximum 5000
15697
+ */
15698
+ limit?: number;
15699
+ };
15700
+ export type AnalyticsControllerStaysV1Params = {
15701
+ /**
15702
+ * The `nextCursor` of the previous page. Omit for the first page.
15703
+ */
15704
+ cursor?: string;
15705
+ /**
15706
+ * Rows per page (1–5000).
15707
+ * @minimum 1
15708
+ * @maximum 5000
15709
+ */
15710
+ limit?: number;
15711
+ };
15712
+ export type AnalyticsControllerCustomerMonthsV1Params = {
15713
+ /**
15714
+ * The `nextCursor` of the previous page. Omit for the first page.
15715
+ */
15716
+ cursor?: string;
15717
+ /**
15718
+ * Rows per page (1–5000).
15719
+ * @minimum 1
15720
+ * @maximum 5000
15721
+ */
15722
+ limit?: number;
15723
+ /**
15724
+ * First day (YYYY-MM-DD), in the billing calendar. Defaults to the 1st of the month twelve months before `to`'s. A monthly dataset covers `from`'s month.
15725
+ */
15726
+ from?: string;
15727
+ /**
15728
+ * Last day, included. Defaults to the latest night the nightly build covers. The range may span at most 25 calendar months.
15729
+ */
15730
+ to?: string;
15731
+ };
15732
+ export type AnalyticsControllerRevenueV1Params = {
15733
+ /**
15734
+ * The `nextCursor` of the previous page. Omit for the first page.
15735
+ */
15736
+ cursor?: string;
15737
+ /**
15738
+ * Rows per page (1–5000).
15739
+ * @minimum 1
15740
+ * @maximum 5000
15741
+ */
15742
+ limit?: number;
15743
+ /**
15744
+ * First day (YYYY-MM-DD), in the billing calendar. Defaults to the 1st of the month twelve months before `to`'s. A monthly dataset covers `from`'s month.
15745
+ */
15746
+ from?: string;
15747
+ /**
15748
+ * Last day, included. Defaults to the latest night the nightly build covers. The range may span at most 25 calendar months.
15749
+ */
15750
+ to?: string;
15751
+ /**
15752
+ * Which month `from`/`to` select and the rows are ordered by: the invoice's month, or the month the charge was for.
15753
+ */
15754
+ dateBasis?: AnalyticsControllerRevenueV1DateBasis;
15755
+ };
15756
+ export type AnalyticsControllerRevenueV1DateBasis = typeof AnalyticsControllerRevenueV1DateBasis[keyof typeof AnalyticsControllerRevenueV1DateBasis];
15757
+ export declare const AnalyticsControllerRevenueV1DateBasis: {
15758
+ readonly invoice: "invoice";
15759
+ readonly service: "service";
15760
+ };
15224
15761
  //# sourceMappingURL=index.schemas.d.ts.map