@vindentech/api-client 0.3.0-next.61 → 0.3.0-next.63

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.
@@ -343,6 +343,17 @@ export declare const OrderDetailDtoType: {
343
343
  readonly PICKING: "PICKING";
344
344
  readonly MERCHANDISE_SALE: "MERCHANDISE_SALE";
345
345
  };
346
+ /**
347
+ * The app the order was booked through, carried from the originating cart at placement. Read-only. `UNKNOWN` means no channel was recorded — an order placed before the field was captured.
348
+ */
349
+ export type OrderDetailDtoSource = typeof OrderDetailDtoSource[keyof typeof OrderDetailDtoSource];
350
+ export declare const OrderDetailDtoSource: {
351
+ readonly CUSTOMER_WEB: "CUSTOMER_WEB";
352
+ readonly CUSTOMER_APP: "CUSTOMER_APP";
353
+ readonly ADMIN_APP: "ADMIN_APP";
354
+ readonly API: "API";
355
+ readonly UNKNOWN: "UNKNOWN";
356
+ };
346
357
  export interface OrderDetailDto {
347
358
  salesOrderId: string;
348
359
  /** Per-job operational number (tenant sequence). */
@@ -428,6 +439,8 @@ export interface OrderDetailDto {
428
439
  * @nullable
429
440
  */
430
441
  cartId: string | null;
442
+ /** The app the order was booked through, carried from the originating cart at placement. Read-only. `UNKNOWN` means no channel was recorded — an order placed before the field was captured. */
443
+ source: OrderDetailDtoSource;
431
444
  /** Whether the job is a picking job. */
432
445
  picking: boolean;
433
446
  /** @nullable */
@@ -2337,6 +2350,15 @@ export declare const CreateCartDtoCustomerType: {
2337
2350
  readonly business: "business";
2338
2351
  readonly personal: "personal";
2339
2352
  };
2353
+ /**
2354
+ * Which app is creating this cart. Omitted resolves to the caller's default channel (ADMIN_APP for staff, CUSTOMER_WEB otherwise), so an existing client keeps its current value. ADMIN_APP is accepted only from a staff caller and the customer channels only from a non-staff one — a channel the caller cannot be on is a 400 rather than a silent correction, because a corrected value reads exactly like a truthful one, which is the ambiguity this field exists to remove.
2355
+ */
2356
+ export type CreateCartDtoSource = typeof CreateCartDtoSource[keyof typeof CreateCartDtoSource];
2357
+ export declare const CreateCartDtoSource: {
2358
+ readonly ADMIN_APP: "ADMIN_APP";
2359
+ readonly CUSTOMER_WEB: "CUSTOMER_WEB";
2360
+ readonly CUSTOMER_APP: "CUSTOMER_APP";
2361
+ };
2340
2362
  export interface CreateCartDto {
2341
2363
  cartType: CreateCartDtoCartType;
2342
2364
  /** Defaults to the caller's organization type; required for guests. */
@@ -2347,6 +2369,8 @@ export interface CreateCartDto {
2347
2369
  currencyCode: string;
2348
2370
  /** Staff create-on-behalf target organization. Ignored for org users (own org). */
2349
2371
  organizationId?: string;
2372
+ /** Which app is creating this cart. Omitted resolves to the caller's default channel (ADMIN_APP for staff, CUSTOMER_WEB otherwise), so an existing client keeps its current value. ADMIN_APP is accepted only from a staff caller and the customer channels only from a non-staff one — a channel the caller cannot be on is a 400 rather than a silent correction, because a corrected value reads exactly like a truthful one, which is the ambiguity this field exists to remove. */
2373
+ source?: CreateCartDtoSource;
2350
2374
  }
2351
2375
  export interface CartContactDto {
2352
2376
  /** @nullable */
@@ -2525,6 +2549,16 @@ export declare const CartDtoCustomerType: {
2525
2549
  readonly business: "business";
2526
2550
  readonly personal: "personal";
2527
2551
  };
2552
+ /**
2553
+ * The app this cart was created in. Read-only; set at creation.
2554
+ */
2555
+ export type CartDtoSource = typeof CartDtoSource[keyof typeof CartDtoSource];
2556
+ export declare const CartDtoSource: {
2557
+ readonly CUSTOMER_WEB: "CUSTOMER_WEB";
2558
+ readonly CUSTOMER_APP: "CUSTOMER_APP";
2559
+ readonly ADMIN_APP: "ADMIN_APP";
2560
+ readonly API: "API";
2561
+ };
2528
2562
  /**
2529
2563
  * Versioned pricing payload (schema_version tracked server-side)
2530
2564
  * @nullable
@@ -2538,6 +2572,8 @@ export interface CartDto {
2538
2572
  status: string;
2539
2573
  cartType: CartDtoCartType;
2540
2574
  customerType: CartDtoCustomerType;
2575
+ /** The app this cart was created in. Read-only; set at creation. */
2576
+ source: CartDtoSource;
2541
2577
  revision: number;
2542
2578
  /** @nullable */
2543
2579
  organizationId: string | null;
@@ -5323,6 +5359,8 @@ export interface ProductDto {
5323
5359
  status: string;
5324
5360
  /** In-storage unit count — a projection of the product's live IN_STORAGE pods (SUM of their quantity), recomputed alongside status. Never client-set; frozen alongside status once it leaves CREATED/HOME/IN_STORAGE. */
5325
5361
  quantity: number;
5362
+ /** In-storage units NOT already committed to an open delivery — `quantity` minus what live order lines on live, non-terminal DELIVERY orders still expect to take out (requested minus already picked, so a part-picked order is not counted twice). This, not `quantity`, is the ceiling a booking UI should clamp a delivery selection to. Never negative. Placement enforces the same number under a lock and answers 409 `product_quantity_unavailable` when a cart exceeds it, so treat that refusal — not this value — as authoritative: the value read here can be stale by the time the order is placed, and for a caller who cannot see every committing order (warehouse staff, typically) it reads high. An org user's own My-Storage read is exact. Unaffected by MOVE and PICKUP orders, which neither reserve stock nor are refused for lack of it. */
5363
+ availableQuantity: number;
5326
5364
  /** @nullable */
5327
5365
  categoryId: number | null;
5328
5366
  /** @nullable */