/* eslint-disable */
/* tslint:disable */
/*
 * ---------------------------------------------------------------
 * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API        ##
 * ##                                                           ##
 * ## AUTHOR: acacode                                           ##
 * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
 * ---------------------------------------------------------------
 */

/** Account summary of an organizational unit. */
export interface AccountSummary {
  /** Reference to organizational unit. */
  orgUnit?: OrgUnitReference;
  /** Account balance details. */
  amountBalance?: AmountBalance;
  /** Address object */
  billingAddress?: Address;
  /**
   * Credit limit amount, formatted as per the selected currency.
   * @example "$15,000.00"
   */
  creditLimit?: string;
  /**
   * Name of the account manager.
   * @example "Elke Vogel"
   */
  accountManagerName?: string;
  /**
   * Email of the account manager.
   * @example "elke.vogel@rustic.com"
   */
  accountManagerEmail?: string;
}

export interface AddToCartParams {
  productCode?: string;
  /** @format int64 */
  quantity?: number;
  storeId?: string;
  /** @uniqueItems true */
  entryGroupNumbers?: number[];
}

/** Address object */
export interface Address {
  /** Unique id value of the address which is optional while creating new address. While performing other address operations this value is the key */
  id?: string;
  /**
   * Title of the address person
   * @example "Mr."
   */
  title?: string;
  /**
   * Code of the title
   * @example "MR"
   */
  titleCode: string;
  /**
   * First name of the address person
   * @example "John"
   */
  firstName: string;
  /**
   * Last name of the address person
   * @example "Doe"
   */
  lastName: string;
  /**
   * Company Name
   * @example "Global Corp."
   */
  companyName?: string;
  /**
   * First line of the address
   * @example "123 Main Street"
   */
  line1: string;
  /**
   * Second line of the address
   * @example "Garden Level"
   */
  line2?: string;
  /**
   * Town, field required
   * @example "New York City"
   */
  town: string;
  /** Response body fields which will be returned while fetching the list of country's regions. */
  region?: Region;
  /**
   * District name
   * @example "8th"
   */
  district?: string;
  /**
   * Postal code of the address
   * @example "10001"
   */
  postalCode: string;
  /**
   * Phone number
   * @example "+1 (123) 456-7890"
   */
  phone?: string;
  /**
   * Cellphone number
   * @example "+1 (123) 456-7890"
   */
  cellphone?: string;
  /**
   * Email address
   * @example "johndoe@domain.com"
   */
  email?: string;
  /** Response body fields which will be returned while fetching the list of countries. The DTO is in XML or .json format */
  country?: Country;
  /** Boolean flag if address is for shipping */
  shippingAddress?: boolean;
  /** Boolean flag if address is default */
  defaultAddress?: boolean;
  /** Boolean flag if address is visible in the Address Book */
  visibleInAddressBook?: boolean;
  /** Boolean flag if address is formatted */
  formattedAddress?: string;
}

/** Representation of an Address list */
export interface AddressList {
  /** List of addresses */
  addresses?: Address[];
}

/** Representation of an Address Validation */
export interface AddressValidation {
  /** List of errors */
  errors?: ErrorList;
  /** Decision */
  decision?: string;
  /** List of suggested addresses */
  suggestedAddresses?: Address[];
}

/** Account balance details. */
export interface AmountBalance {
  /**
   * Open balance as the sum of all open transactional documents, including documents that are past the payment due date.
   * @example "$430.45"
   */
  openBalance?: string;
  /**
   * Past due balance as the sum of all open transactional documents that are past the payment due date.
   * @example "$130.45"
   */
  pastDueBalance?: string;
  /**
   * Current balance as the sum of all open transactional documents that are not past the payment due date.
   * @example "$300.00"
   */
  currentBalance?: string;
  /** Balance due for each of the defined day ranges. For example, $100 due in 1-30 days, $200 due in 31-60 days, $300 due in 61-90 days, $400 due in 91+ days. */
  dueBalances?: DueBalanceRange[];
}

export interface AnnualExpensesSummary {
  monthlySummary?: MonthExpensesSummary[];
  /** @format double */
  annualAmountSpent?: number;
  currencySymbol?: string;
}

/** Representation of supplementary info, warning messages, even when the business APIs successfully execute their operations. */
export interface ApiMessage {
  /** Type of message, e.g. info, warning */
  kind?: string;
  /** A unique identifier for the message */
  code?: string;
  /** A human-readable description of the message */
  message?: string;
  /** Reference(s) to the specific part(s) of the cart that the message pertains to */
  target?: string;
}

export interface ApplePayLineItem {
  type?: string;
  label?: string;
  amount?: string;
}

export interface ApplePayPaymentContact {
  phoneNumber?: string;
  emailAddress?: string;
  givenName?: string;
  familyName?: string;
  phoneticGivenName?: string;
  phoneticFamilyName?: string;
  addressLines?: string[];
  subLocality?: string;
  locality?: string;
  postalCode?: string;
  subAdministrativeArea?: string;
  administrativeArea?: string;
  country?: string;
  countryCode?: string;
}

export interface ApplePayPaymentMethod {
  displayName?: string;
  network?: string;
  type?: string;
  paymentPass?: ApplePayPaymentPass;
}

export interface ApplePayPaymentPass {
  primaryAccountIdentifier?: string;
  primaryAccountNumberSuffix?: string;
  deviceAccountIdentifier?: string;
  deviceAccountNumberSuffix?: string;
  activationState?: string;
}

export interface ApplePayPaymentRequest {
  merchantCapabilities?: string[];
  supportedNetworks?: string[];
  countryCode?: string;
  requiredBillingContactFields?: string[];
  billingContact?: ApplePayPaymentContact;
  requiredShippingContactFields?: string[];
  shippingContact?: ApplePayPaymentContact;
  applicationData?: string;
  supportedCountries?: string[];
  total?: ApplePayLineItem;
  lineItems?: ApplePayLineItem[];
  currencyCode?: string;
  shippingType?: string;
  shippingMethods?: ApplePayShippingMethod[];
}

export interface ApplePayPaymentTokenHeader {
  ephemeralPublicKey?: string;
  publicKeyHash?: string;
  transactionId?: string;
}

export interface ApplePayPaymentToken {
  paymentMethod?: ApplePayPaymentMethod;
  transactionIdentifier?: string;
  paymentData?: ApplePayPayment;
}

export interface ApplePayPayment {
  token?: ApplePayPaymentToken;
  billingContact?: ApplePayPaymentContact;
  shippingContact?: ApplePayPaymentContact;
  version?: string;
  data?: string;
  signature?: string;
  header?: ApplePayPaymentTokenHeader;
}

export interface ApplePayShippingMethodUpdate {
  newTotal?: ApplePayLineItem;
  newLineItems?: ApplePayLineItem[];
  newShippingMethods?: ApplePayShippingMethod[];
}

export interface ApplePayShippingMethod {
  label?: string;
  detail?: string;
  amount?: string;
  identifier?: string;
}

export interface Article {
  url?: string;
  name?: string;
  images?: Image[];
}

/** Representation of an organizational approval process */
export interface B2BApprovalProcess {
  /**
   * Code of the Organizational Approval Process
   * @example "accApproval"
   */
  code: string;
  /**
   * Name of the Organizational Approval Process
   * @example "Escalation Approval with Merchant Check"
   */
  name?: string;
}

/** Representation of an organizational approval process list */
export interface B2BApprovalProcessList {
  /** List of Organizational Approval Process */
  approvalProcesses: B2BApprovalProcess[];
}

/** Cost center object. */
export interface B2BCostCenter {
  /**
   * The original code of the cost center. Deprecated since 2005.
   * @deprecated
   * @example "Custom_Retail"
   */
  originalCode?: string;
  /**
   * The name of the cost center
   * @example "Custom Retail"
   */
  name?: string;
  /**
   * Indication of whether the cost center is active. Deprecated since 2005. Read-only, used for display purposes.
   * @deprecated
   * @example "true"
   */
  active?: string;
  /**
   * Boolean flag of whether the cost center is active.
   * @example true
   */
  activeFlag?: boolean;
  /**
   * The code of the cost center
   * @example "Custom_Retail"
   */
  code?: string;
  /** Representation of a Currency */
  currency?: Currency;
  /** Organizational unit object. */
  unit?: B2BUnit;
  /** Budgets assigned to this cost center */
  assignedBudgets?: BudgetShallow[];
}

/** Representation of a cost center list */
export interface B2BCostCenterList {
  /** List of cost centers */
  costCenters?: B2BCostCenter[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
}

/** Representation of a cost center. This bean is shallow, which means its potential relationship fields to other Org Unit fields are simple ids. No Org Unit WsDTO fields should be declared in this bean to avoid circular references. */
export interface B2BCostCenterShallow {
  /**
   * The original code of the cost center. Deprecated since 2005.
   * @deprecated
   * @example "Custom_Retail"
   */
  originalCode?: string;
  /**
   * The name of the cost center
   * @example "Custom Retail"
   */
  name?: string;
  /**
   * Indication of whether the cost center is active. Deprecated since 2005. Read-only, used for display purposes.
   * @deprecated
   * @example "true"
   */
  active?: string;
  /**
   * Boolean flag of whether the cost center is active.
   * @example true
   */
  activeFlag?: boolean;
  /**
   * The code of the cost center
   * @example "Custom_Retail"
   */
  code?: string;
  /** Representation of a Currency */
  currency?: Currency;
}

export interface B2BPaymentTypeData {
  code?: string;
  displayName?: string;
}

export interface B2BPaymentTypeList {
  paymentTypes?: B2BPaymentType[];
}

export interface B2BPaymentType {
  code?: string;
  displayName?: string;
}

/** Representation of object selection data */
export interface B2BSelectionData {
  /**
   * The ID of the selected object
   * @example "Retail_2K"
   */
  id?: string;
  /**
   * If the this object was selected
   * @example true
   */
  selected?: boolean;
  /**
   * If this object is active
   * @example false
   */
  active?: boolean;
  /** roles */
  roles?: string[];
  /** display roles */
  displayRoles?: string[];
  /** The normalized code */
  normalizedCode?: string;
}

/** Organizational unit object. */
export interface B2BUnit {
  /**
   * Boolean flag of whether Organizational Unit is active
   * @example true
   */
  active?: boolean;
  /**
   * Identifier of the organizational unit
   * @example "Pronto"
   */
  uid: string;
  /**
   * Name of the organizational unit
   * @example "Pronto"
   */
  name?: string;
  /** Organizational unit object. */
  parentOrgUnit?: B2BUnit;
  /** Representation of an organizational approval process */
  approvalProcess?: B2BApprovalProcess;
  /** Addresses of the organizational unit node */
  addresses?: Address[];
  /** Approvers of the organizational unit node */
  approvers?: User[];
  /** Managers of the organizational unit node */
  managers?: User[];
  /** Administrators of the organizational unit node */
  administrators?: User[];
  /** Customers of the organizational unit node */
  customers?: User[];
  /** The cost centers of the organizational unit node */
  costCenters?: B2BCostCenterShallow[];
}

/** Representation of an organizational unit node */
export interface B2BUnitNode {
  /**
   * Identifier of the organizational unit represented by the node
   * @example "Pronto_Retail"
   */
  id: string;
  /**
   * Name of the organizational unit represented by the node
   * @example "Pronto Retail"
   */
  name?: string;
  /**
   * Unique identifier of organizational unit node's parent unit
   * @example "Pronto"
   */
  parent?: string;
  /**
   * Boolean flag of whether organizational unit represented by the node is active
   * @example true
   */
  active?: boolean;
  /** Child nodes of the organizational unit node */
  children?: B2BUnitNode[];
}

/** Representation of an organizational unit node list */
export interface B2BUnitNodeList {
  /** List of Unit Nodes */
  unitNodes: B2BUnitNode[];
}

/** Representation of a Base Option */
export interface BaseOption {
  /** Variant type of base option */
  variantType?: string;
  /** List of all variant options */
  options?: VariantOption[];
  /** Representation of a Variant Option */
  selected?: VariantOption;
}

/** Representation of a Base Site */
export interface BaseSite {
  /** Unique identifier of Basesite */
  uid?: string;
  /** Name of Basesite */
  name?: string;
  /** List of Basestores */
  stores?: BaseStore[];
  /** Theme of Basesite */
  theme?: string;
  /** Representation of a Language */
  defaultLanguage?: Language;
  /** Locale data for Basesite */
  locale?: string;
  /** Channel */
  channel?: string;
  /** List of url encoding attributes */
  urlEncodingAttributes?: string[];
  /** List of url patterns */
  urlPatterns?: string[];
  /** Default preview catalog id */
  defaultPreviewCatalogId?: string;
  /** Default preview category code */
  defaultPreviewCategoryCode?: string;
  /** Default preview product code */
  defaultPreviewProductCode?: string;
  /** Indicates whether customer data isolation is enabled for this site. If true, customer can get site information after registration, For example registerd username is name@sap.com, returned uid will be name@sap.com|baseSiteUid */
  isolated?: boolean;
  /** Configuration information of captcha */
  captchaConfig?: CaptchaConfig;
  /**
   * Indicates if the website supports registration
   * @example true
   */
  registrationEnabled?: boolean;
  /**
   * Indicates if the BaseSite requires authentication prior to use it
   * @example true
   */
  requiresAuthentication?: boolean;
  defaultUrl?: string;
  active?: boolean;
}

/** Representation of a Base Site List */
export interface BaseSiteList {
  /** List of basesites */
  baseSites?: BaseSite[];
}

/** Representation of a Base Store */
export interface BaseStore {
  /** Base store name */
  name?: string;
  /** Flag defining is external tax is enabled */
  externalTaxEnabled?: boolean;
  /** Payment provider */
  paymentProvider?: string;
  /** Create return process code */
  createReturnProcessCode?: string;
  /**
   * Maximum radius for searching point of service
   * @format double
   */
  maxRadiusForPosSearch?: number;
  /** Submit order process code */
  submitOrderProcessCode?: string;
  /** List of currencies */
  currencies?: Currency[];
  /** Representation of a Currency */
  defaultCurrency?: Currency;
  /** Representation of a Point of service */
  defaultDeliveryOrigin?: PointOfService;
  /** Representation of a Language */
  defaultLanguage?: Language;
  /** List of delivery countries */
  deliveryCountries?: Country[];
  /** Representation of a Delivery mode list */
  deliveryModes?: DeliveryModeList;
  /** List of languages */
  languages?: Language[];
  /** List of points of service */
  pointsOfService?: PointOfService[];
  /** Flag specifying whether the express checkout option is enabled */
  expressCheckoutEnabled?: boolean;
}

/** Basic notification preference */
export interface BasicnotificationPreference {
  /**
   * preference channel
   * @example "email, sms, site_message"
   */
  channel?: string;
  /** if true, the channel is on; if false, the channel is off */
  enabled?: boolean;
}

/** Notification preference list */
export interface BasicnotificationPreferenceList {
  /** Basic notification preferences */
  preferences?: BasicnotificationPreference[];
}

/** Representation of a Breadcrumb */
export interface Breadcrumb {
  /** Code of the facet */
  facetCode?: string;
  /** Name of the facet */
  facetName?: string;
  /** Value code of the facet */
  facetValueCode?: string;
  /** Value name of the facet */
  facetValueName?: string;
  /** Representation of a Search State */
  removeQuery?: SearchState;
  /** Representation of a Search State */
  truncateQuery?: SearchState;
}

/** Budget. */
export interface Budget {
  /** Boolean flag of whether the Budget is active */
  active?: boolean;
  /**
   * Value of Budget
   * @example 50000
   */
  budget?: number;
  /**
   * Code of the Budget
   * @example "Monthly_50K_USD"
   */
  code?: string;
  /**
   * The name of the Budget
   * @example "Monthly 50K USD"
   */
  name?: string;
  /** Representation of a Currency */
  currency?: Currency;
  /**
   * The start date of the Budget
   * @format date-time
   */
  startDate?: string;
  /**
   * The end date of the Budget
   * @format date-time
   */
  endDate?: string;
  /**
   * Boolean flag whether the budget is selected for a cost center
   * @example true
   */
  selected?: boolean;
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /** List of Cost Centers */
  costCenters?: B2BCostCenter[];
}

/** Representation of a Budget List */
export interface BudgetList {
  /** List of Budgets */
  budgets?: Budget[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
}

/** Request body fields required and optional to operate on Budget data. This bean is shallow, which means its potential relationship fields to other Org Unit fields are simple ids. No Org Unit WsDTO should be declared in this bean to avoid circular references. */
export interface BudgetShallow {
  /** Boolean flag of whether the Budget is active */
  active?: boolean;
  /**
   * Value of Budget
   * @example 50000
   */
  budget?: number;
  /**
   * Code of the Budget
   * @example "Monthly_50K_USD"
   */
  code?: string;
  /**
   * The name of the Budget
   * @example "Monthly 50K USD"
   */
  name?: string;
  /** Representation of a Currency */
  currency?: Currency;
  /**
   * The start date of the Budget
   * @format date-time
   */
  startDate?: string;
  /**
   * The end date of the Budget
   * @format date-time
   */
  endDate?: string;
  /**
   * Boolean flag whether the budget is selected for a cost center
   * @example true
   */
  selected?: boolean;
}

export interface CDSConfiguration {
  tenant?: string;
  baseUrl?: string;
  profileTag?: ProfileTagConfiguration;
}

export interface CMSPageList {
  page?: CMSPage[];
}

export interface CMSPage {
  uid?: string;
  uuid?: string;
  title?: string;
  template?: string;
  typeCode?: string;
  name?: string;
  description?: string;
  robotTag?: string;
  defaultPage?: boolean;
  contentSlots?: ContentSlotList;
  catalogVersionUuid?: string;
  otherProperties?: Record<string, object>;
}

/** Representation of a cancellation request entry input for an order */
export interface CancellationRequestEntryInput {
  /**
   * Order entry number of the cancelled product
   * @format int32
   * @example 1
   */
  orderEntryNumber: number;
  /**
   * Quantity of the product which belongs to the order entry and is requested to be cancelled
   * @format int64
   * @example 5
   */
  quantity: number;
}

/** Cancellation request input list for the current order. */
export interface CancellationRequestEntryInputList {
  /** Cancellation request entry inputs which contain information about the order entries which are requested to be cancelled */
  cancellationRequestEntryInputs: CancellationRequestEntryInput[];
}

/** Configuration information of captcha */
export interface CaptchaConfig {
  /**
   * Indicates if the captcha is enabled or not
   * @example true
   */
  enabled?: boolean;
  /**
   * The public key used in captcha validation
   * @example "6LdeF6tgAAAAAE_T55TB0nmg--qmbnkwqC4LPQbg"
   */
  publicKey?: string;
}

/** Representation of a Card Type */
export interface CardType {
  /** Card type code */
  code?: string;
  /** Card type name */
  name?: string;
}

/** Representation of a Card Type List */
export interface CardTypeList {
  /** List of card types */
  cardTypes?: CardType[];
}

/** Representation of a Cart. Note that sapBillingAddress is mutually exclusive with paymentInfo.billingAddress, which is used when the billing address is created concurrently with the paymentInfo. sapBillingAddress is used when there is a need to save the billing address, but the related paymentInfo has not been created yet. */
export interface Cart {
  /** Code number of order */
  code?: string;
  /** Flag stating iv value is net-value */
  net?: boolean;
  /** Representation of a Price */
  totalPriceWithTax?: Price;
  /** Representation of a Price */
  totalPrice?: Price;
  /** Representation of a Price */
  totalTax?: Price;
  /** Representation of a Price */
  subTotal?: Price;
  /** Representation of a Price */
  deliveryCost?: Price;
  /** List of order entries */
  entries?: OrderEntry[];
  /** List of entry groups */
  entryGroups?: EntryGroup[];
  /** @format int32 */
  totalItems?: number;
  /** Representation of a Delivery mode */
  deliveryMode?: DeliveryMode;
  /** Address object */
  deliveryAddress?: Address;
  /** Payment details object */
  paymentInfo?: PaymentDetails;
  /** List of applied order promotions */
  appliedOrderPromotions?: PromotionResult[];
  /** List of applied product promotions */
  appliedProductPromotions?: PromotionResult[];
  /** Representation of a Price */
  productDiscounts?: Price;
  /** Representation of a Price */
  orderDiscounts?: Price;
  /** Representation of a Price */
  totalDiscounts?: Price;
  /** Site */
  site?: string;
  /** Store */
  store?: string;
  /** Guest user id identifier */
  guid?: string;
  /** Flag showing if order is calculated */
  calculated?: boolean;
  /** List of applied vouchers */
  appliedVouchers?: Voucher[];
  /** Representation of a Principal webservice DTO used for defining User data types */
  user?: Principal;
  /** List of pickup order entry group */
  pickupOrderGroups?: PickupOrderEntryGroup[];
  /** List of delivery order entries group */
  deliveryOrderGroups?: DeliveryOrderEntryGroup[];
  /**
   * Quantity of pickup items
   * @format int64
   */
  pickupItemsQuantity?: number;
  /**
   * Quantity of delivery items
   * @format int64
   */
  deliveryItemsQuantity?: number;
  /** Customer requested date for order retrieval */
  requestedRetrievalAt?: string;
  /** Address object */
  sapBillingAddress?: Address;
  /**
   * Email of customer.
   * @example "xxx.yy@zz.com"
   */
  sapCustomerEmail?: string;
  giftCardPayments?: GiftCardPayment[];
  ppsLoyaltyCard?: PPSLoyaltyCard;
  promotionNameList?: string[];
  promotionRecommendationList?: string[];
  /** Representation of a Price */
  totalPriceWithoutDiscount?: Price;
  placedBy?: string;
  shipSeparately?: boolean;
  /** Representation of a Point of service */
  returnStore?: PointOfService;
  /**
   * Total unit count
   * @format int32
   */
  totalUnitCount?: number;
  /** List of potential order promotions for cart */
  potentialOrderPromotions?: PromotionResult[];
  /** List of potential product promotions for cart */
  potentialProductPromotions?: PromotionResult[];
  /** Name of the cart */
  name?: string;
  /** Description of the cart */
  description?: string;
  /**
   * Date of cart expiration time
   * @format date-time
   */
  expirationTime?: string;
  /**
   * Date of saving cart
   * @format date-time
   */
  saveTime?: string;
  /** Representation of a Principal webservice DTO used for defining User data types */
  savedBy?: Principal;
  /** Earliest possible retrieval date available for order */
  earliestRetrievalAt?: string;
  /** Messages about supplementary info, warning messages related to the cart */
  _messages?: ApiMessage[];
  /** Cost center object. */
  costCenter?: B2BCostCenter;
  paymentType?: B2BPaymentTypeData;
  purchaseOrderNumber?: string;
  /** Representation of the quote object. */
  sapQuote?: Quote;
  omsaInternalCost?: string;
  omsaPickAndPackCost?: string;
}

export interface CartGeneratorParameter {
  /** Currency */
  currency: string;
  /** Product Catalog */
  productCatalog: string;
  /** Start Date */
  startDate: string;
  /** End Date */
  endDate: string;
  /**
   * Maximum number of Cart per day
   * @format int32
   */
  maxCartsPerDay: number;
  /**
   * Maximum quantity
   * @format int32
   */
  maxQuantity: number;
}

/** Representation of a Cart list */
export interface CartList {
  /** List of carts */
  carts?: Cart[];
}

/** Representation of a Cart modification */
export interface CartModification {
  /** Status code of cart modification */
  statusCode?: string;
  /**
   * Quantity added with cart modification
   * @format int64
   */
  quantityAdded?: number;
  /**
   * Total number of products to be created, added or updated during a cart modification. This value is always the quantity that has been requested.
   * @format int64
   */
  quantity?: number;
  /**
   * Request body parameter that contains details such as the quantity of product (quantity), and the pickup store name (deliveryPointOfService.name)
   *
   * The DTO is in XML or .json format.
   */
  entry?: OrderEntry;
  /** Delivery mode changed */
  deliveryModeChanged?: boolean;
  /** Status message */
  statusMessage?: string;
}

/** Representation of a Cart modification list */
export interface CartModificationList {
  /** List of cart modifications */
  cartModifications?: CartModification[];
}

/** Representation of a Catalog */
export interface Catalog {
  /** Identifier of abstract catalog item */
  id?: string;
  /**
   * Date of last modification
   * @format date-time
   */
  lastModified?: string;
  /** Name of abstract catalog item */
  name?: string;
  /** Url address of abstract catalog item */
  url?: string;
  /** List of versions of catalog */
  catalogVersions?: CatalogVersion[];
}

/** Representation of a Catalog List */
export interface CatalogList {
  /** List of catalog items */
  catalogs?: Catalog[];
}

/** Representation of a Catalog Version */
export interface CatalogVersion {
  /** Identifier of abstract catalog item */
  id?: string;
  /**
   * Date of last modification
   * @format date-time
   */
  lastModified?: string;
  /** Name of abstract catalog item */
  name?: string;
  /** Url address of abstract catalog item */
  url?: string;
  /** List of category hierarchies */
  categories?: CategoryHierarchy[];
}

/** Representation of a Category */
export interface Category {
  /** Code of the category */
  code?: string;
  /** Name of the category */
  name?: string;
  /** URL of the category */
  url?: string;
  /** Representation of an Image */
  image?: Image;
  images?: Image[];
}

/** Representation of a Category Hierarchy */
export interface CategoryHierarchy {
  /** Identifier of abstract catalog item */
  id?: string;
  /**
   * Date of last modification
   * @format date-time
   */
  lastModified?: string;
  /** Name of abstract catalog item */
  name?: string;
  /** Url address of abstract catalog item */
  url?: string;
  /** List of subcategory hierarchies */
  subcategories?: CategoryHierarchy[];
  products?: Product[];
}

export interface CategorySpendSummary {
  categories?: CategorySpend[];
  /** Representation of a Price */
  totalAmount?: Price;
}

export interface CategorySpend {
  categoryId?: string;
  categoryName?: string;
  /** @format double */
  percentageOfTotal?: number;
  /** Representation of a Price */
  amountSpent?: Price;
}

/** Representation of a Classification */
export interface Classification {
  /** Code of the classification */
  code?: string;
  /** Name of the classification */
  name?: string;
  /** List of features for given classification */
  features?: Feature[];
}

/** Object of the comment, which can be added to any Item in the commerce suite. */
export interface Comment {
  /**
   * Text of the comment.
   * @example "Text of the comment"
   */
  text: string;
  /**
   * Date when the comment was created.
   * @format date-time
   */
  creationDate: string;
  /** Representation of a Principal webservice DTO used for defining User data types */
  author?: Principal;
  /**
   * Flag showing if the current customer was the author of the comment.
   * @example true
   */
  fromCustomer: boolean;
}

/** List of component identifiers */
export interface ComponentIDList {
  idList?: string[];
}

export interface ComponentList {
  component?: Component[];
}

export interface Component {
  uid?: string;
  uuid?: string;
  typeCode?: string;
  /** @format date-time */
  modifiedtime?: string;
  name?: string;
  otherProperties?: Record<string, object>;
}

/** Representation of a Configuration Info */
export interface ConfigurationInfo {
  /** Type of configuration info */
  configuratorType?: string;
  /** Status of configuration info */
  status?: string;
  /** Label of configuration info */
  configurationLabel?: string;
  /** Value of configuration info */
  configurationValue?: string;
}

/** Representation of a Consent */
export interface Consent {
  /** Code of consent */
  code?: string;
  /**
   * Date of consenting
   * @format date-time
   */
  consentGivenDate?: string;
  /**
   * Consent withdrawn date
   * @format date-time
   */
  consentWithdrawnDate?: string;
}

/** Representation of a Consent Template */
export interface ConsentTemplate {
  /** Consent template identifier */
  id?: string;
  /** Consent template name */
  name?: string;
  /** Consent template description */
  description?: string;
  /**
   * Consent template version
   * @format int32
   */
  version?: number;
  /** Representation of a Consent */
  currentConsent?: Consent;
}

/** Representation of a Consent Template List */
export interface ConsentTemplateList {
  /** List of consent templates */
  consentTemplates?: ConsentTemplate[];
}

/** Representation of a Consignment */
export interface Consignment {
  /** Consignment code */
  code?: string;
  /** Consignment tracking identifier */
  trackingID?: string;
  /** Consignment status */
  status?: string;
  /** Consignment status display */
  statusDisplay?: string;
  /**
   * Consignment status date
   * @format date-time
   */
  statusDate?: string;
  /** List of consignment entries */
  entries?: ConsignmentEntry[];
  /** Address object */
  shippingAddress?: Address;
  /** Representation of a Point of service */
  deliveryPointOfService?: PointOfService;
  /** Records of item arrivals facilitate the tracking and management of item quantities, associated arrival times, and certainty levels. These records distinguish between guaranteed, estimated, and unknown arrival scenarios. */
  arrivalSlot?: EntryArrivalSlot;
  orderCode?: string;
  /** @format date-time */
  shippingDate?: string;
  /** Representation of a Delivery mode */
  deliveryMode?: DeliveryMode;
  warehouseCode?: string;
  /** Representation of a Packaging Information */
  packagingInfo?: PackagingInfo;
}

/** Representation of a Consignment Entry */
export interface ConsignmentEntry {
  /**
   * Request body parameter that contains details such as the quantity of product (quantity), and the pickup store name (deliveryPointOfService.name)
   *
   * The DTO is in XML or .json format.
   */
  orderEntry?: OrderEntry;
  /**
   * Quantity value of Consignment entry
   * @format int64
   */
  quantity?: number;
  /**
   * Shipped quantity
   * @format int64
   */
  shippedQuantity?: number;
  /** @format int64 */
  quantityDeclined?: number;
  /** @format int64 */
  quantityPending?: number;
  /** @format int64 */
  quantityShipped?: number;
}

export interface ConsumedDestinationData {
  url?: string;
  authUrl?: string;
  clientId?: string;
  clientSecret?: string;
}

export interface ContentSlotList {
  contentSlot?: ContentSlot[];
}

export interface ContentSlot {
  slotId?: string;
  slotUuid?: string;
  position?: string;
  name?: string;
  slotShared?: boolean;
  slotStatus?: string;
  components?: ComponentList;
  otherProperties?: Record<string, object>;
}

/** Response body fields which will be returned while fetching the list of countries. The DTO is in XML or .json format */
export interface Country {
  /**
   * Country code in iso format
   * @example "US"
   */
  isocode?: string;
  /**
   * Name of the country
   * @example "United States"
   */
  name?: string;
}

/** List of countries */
export interface CountryList {
  /** This is the list of Country fields that should be returned in the response body */
  countries?: Country[];
}

export interface CouponData {
  couponCode?: string;
  couponId?: string;
  name?: string;
  active?: boolean;
  /** @format date-time */
  startDate?: string;
  /** @format date-time */
  endDate?: string;
}

export interface CouponRedemptionResponseList {
  responses?: CouponRedemption[];
  sorts?: Sort[];
  /** Pagination info */
  pagination?: Pagination;
}

/** Text of the comment */
export interface CreateComment {
  /**
   * Text of the comment.
   * @example "Text of the comment"
   */
  text: string;
}

/** Object contains information for obtaining a verification token. */
export interface CreateVerificationTokenInput {
  /** Purpose for which the verification token is requested. */
  purpose: "LOGIN" | "REGISTRATION";
  /**
   * User login identifier. Target to receive verification token code.
   * @example "keenreviewer@sap.com"
   */
  loginId: string;
  /**
   * User password to authenticate the request. This field is required when the purpose is LOGIN.
   * @example "mypwd!0"
   */
  password?: string;
}

/** Representation of a Currency */
export interface Currency {
  /** Code of the currency in iso format */
  isocode?: string;
  /** Name of the currency */
  name?: string;
  /** Boolean flag whether currency is active */
  active?: boolean;
  /** Symbol of the currency */
  symbol?: string;
}

/** Representation of a Currency List */
export interface CurrencyList {
  /** List of currencies */
  currencies?: Currency[];
}

/** Customer coupon */
export interface CustomerCoupon {
  /** Coupon identifier */
  couponId?: string;
  /** Name of the coupon */
  name?: string;
  /**
   * Start date of the coupon
   * @format date-time
   */
  startDate?: string;
  /**
   * End date of the coupon
   * @format date-time
   */
  endDate?: string;
  /**
   * Status of the coupon
   * @example "Effective"
   */
  status?: string;
  /** Description of the coupon */
  description?: string;
  /** Indicates if notification is enabled or disabled */
  notificationOn?: boolean;
  /** Indicates whether the coupon is applicable for all products */
  allProductsApplicable?: boolean;
}

/** Customer coupon for customer */
export interface CustomerCoupon2Customer {
  /** Customer coupon */
  coupon?: CustomerCoupon;
  /** User's object. */
  customer?: User;
}

/** Customer coupon notification */
export interface CustomerCouponNotification {
  /** Customer coupon */
  coupon?: CustomerCoupon;
  /** User's object. */
  customer?: User;
  /**
   * Notification status
   * @example "EFFECTIVESENT"
   */
  status?: string;
}

/** Customer coupon search result */
export interface CustomerCouponSearchResult {
  /** List of coupon */
  coupons?: CustomerCoupon[];
  /** Sorting information */
  sorts?: Sort[];
  /** Pagination info */
  pagination?: Pagination;
}

export interface CxaiConfigData {
  code?: string;
  consumedDestinationId?: string;
  active?: boolean;
  catalogId?: string;
  catalogVersion?: string;
  authUrl?: string;
  tenantUrl?: string;
  clientId?: string;
  clientSecret?: string;
  askProductDestination?: ConsumedDestinationData;
  /** @format int32 */
  askProductContextMessageWindow?: number;
  /** @format int32 */
  askProductContextCharacterLimit?: number;
  assistantDestination?: ConsumedDestinationData;
  assistantConfigId?: string;
  apiVersion?: string;
  variantDuplicateFiltering?: boolean;
  enableObjectDetection?: boolean;
  enableMockProducts?: boolean;
  /** @format int32 */
  maxImageSize?: number;
  allowStyleVariantSelection?: boolean;
  /** @format int32 */
  maxSetSuggestions?: number;
  /** @format int32 */
  maxSimilarProductSuggestions?: number;
  /** @format double */
  objectDetectionMinScore?: number;
  /** @format double */
  similarProductMinScore?: number;
  /** @format double */
  recommendationMinScore?: number;
  /** @format int32 */
  sessionStorageTimeoutSeconds?: number;
  qrCodeUrl?: string;
}

/** Maximum and minimum limits of the day range. */
export interface DayRange {
  /**
   * Minimum day range.
   * @format int32
   * @example 31
   */
  minBoundary: number;
  /**
   * Maximum day range. The value null is used for infinite ranges. For example, a minBoundary of 91 and a maxBoundary of null represents a 91+ day range.
   * @format int32
   * @example 60
   */
  maxBoundary?: number;
}

export interface Declaration {
  property?:
    | "ALIGN_CONTENT"
    | "ALIGN_ITEMS"
    | "ALIGN_SELF"
    | "ALL"
    | "ANIMATION"
    | "ANIMATION_DELAY"
    | "ANIMATION_DIRECTION"
    | "ANIMATION_DURATION"
    | "ANIMATION_FILL_MODE"
    | "ANIMATION_ITERATION_COUNT"
    | "ANIMATION_NAME"
    | "ANIMATION_PLAY_STATE"
    | "ANIMATION_TIMING_FUNCTION"
    | "BACKFACE_VISIBILITY"
    | "BACKGROUND"
    | "BACKGROUND_ATTACHMENT"
    | "BACKGROUND_BLEND_MODE"
    | "BACKGROUND_CLIP"
    | "BACKGROUND_COLOR"
    | "BACKGROUND_IMAGE"
    | "BACKGROUND_ORIGIN"
    | "BACKGROUND_POSITION"
    | "BACKGROUND_REPEAT"
    | "BACKGROUND_SIZE"
    | "BORDER"
    | "BORDER_BOTTOM"
    | "BORDER_BOTTOM_COLOR"
    | "BORDER_BOTTOM_LEFT_RADIUS"
    | "BORDER_BOTTOM_RIGHT_RADIUS"
    | "BORDER_BOTTOM_STYLE"
    | "BORDER_BOTTOM_WIDTH"
    | "BORDER_COLLAPSE"
    | "BORDER_COLOR"
    | "BORDER_IMAGE"
    | "BORDER_IMAGE_OUTSET"
    | "BORDER_IMAGE_REPEAT"
    | "BORDER_IMAGE_SLICE"
    | "BORDER_IMAGE_SOURCE"
    | "BORDER_IMAGE_WIDTH"
    | "BORDER_LEFT"
    | "BORDER_LEFT_COLOR"
    | "BORDER_LEFT_STYLE"
    | "BORDER_LEFT_WIDTH"
    | "BORDER_RADIUS"
    | "BORDER_RIGHT"
    | "BORDER_RIGHT_COLOR"
    | "BORDER_RIGHT_STYLE"
    | "BORDER_RIGHT_WIDTH"
    | "BORDER_SPACING"
    | "BORDER_STYLE"
    | "BORDER_TOP"
    | "BORDER_TOP_COLOR"
    | "BORDER_TOP_LEFT_RADIUS"
    | "BORDER_TOP_RIGHT_RADIUS"
    | "BORDER_TOP_STYLE"
    | "BORDER_TOP_WIDTH"
    | "BORDER_WIDTH"
    | "BOTTOM"
    | "BOX_DECORATION_BREAK"
    | "BOX_SHADOW"
    | "BOX_SIZING"
    | "BREAK_AFTER"
    | "BREAK_BEFORE"
    | "BREAK_INSIDE"
    | "CAPTION_SIDE"
    | "CARET_COLOR"
    | "CHARSET"
    | "CLEAR"
    | "CLIP"
    | "COLOR"
    | "COLUMN_COUNT"
    | "COLUMN_FILL"
    | "COLUMN_GAP"
    | "COLUMN_RULE"
    | "COLUMN_RULE_COLOR"
    | "COLUMN_RULE_STYLE"
    | "COLUMN_RULE_WIDTH"
    | "COLUMN_SPAN"
    | "COLUMN_WIDTH"
    | "COLUMNS"
    | "CONTENT"
    | "COUNTER_INCREMENT"
    | "COUNTER_RESET"
    | "CURSOR"
    | "DIRECTION"
    | "DISPLAY"
    | "EMPTY_CELLS"
    | "FILL"
    | "FILTER"
    | "FLEX"
    | "FLEX_BASIS"
    | "FLEX_DIRECTION"
    | "FLEX_FLOW"
    | "FLEX_GROW"
    | "FLEX_SHRINK"
    | "FLEX_WRAP"
    | "FLOAT"
    | "FONT"
    | "FONT_FACE"
    | "FONT_FAMILY"
    | "FONT_FEATURE_SETTINGS"
    | "FONT_FEATURE_VALUES"
    | "FONT_KERNING"
    | "FONT_LANGUAGE_OVERRIDE"
    | "FONT_SIZE"
    | "FONT_SIZE_ADJUST"
    | "FONT_STRETCH"
    | "FONT_STYLE"
    | "FONT_SYNTHESIS"
    | "FONT_VARIANT"
    | "FONT_VARIANT_ALTERNATES"
    | "FONT_VARIANT_CAPS"
    | "FONT_VARIANT_EAST_ASIAN"
    | "FONT_VARIANT_LIGATURES"
    | "FONT_VARIANT_NUMERIC"
    | "FONT_VARIANT_POSITION"
    | "FONT_WEIGHT"
    | "GRID"
    | "GRID_AREA"
    | "GRID_AUTO_COLUMNS"
    | "GRID_AUTO_FLOW"
    | "GRID_AUTO_ROWS"
    | "GRID_COLUMN"
    | "GRID_COLUMN_END"
    | "GRID_COLUMN_GAP"
    | "GRID_COLUMN_START"
    | "GRID_GAP"
    | "GRID_ROW"
    | "GRID_ROW_END"
    | "GRID_ROW_GAP"
    | "GRID_ROW_START"
    | "GRID_TEMPLATE"
    | "GRID_TEMPLATE_AREAS"
    | "GRID_TEMPLATE_COLUMNS"
    | "GRID_TEMPLATE_ROWS"
    | "HANGING_PUNCTUATION"
    | "HEIGHT"
    | "HYPHENS"
    | "IMAGE_RENDERING"
    | "IMPORT"
    | "ISOLATION"
    | "JUSTIFY_CONTENT"
    | "KEYFRAMES"
    | "LEFT"
    | "LETTER_SPACING"
    | "LINE_BREAK"
    | "LINE_HEIGHT"
    | "LIST_STYLE"
    | "LIST_STYLE_IMAGE"
    | "LIST_STYLE_POSITION"
    | "LIST_STYLE_TYPE"
    | "MARGIN"
    | "MARGIN_BOTTOM"
    | "MARGIN_LEFT"
    | "MARGIN_RIGHT"
    | "MARGIN_TOP"
    | "MAX_HEIGHT"
    | "MAX_WIDTH"
    | "MEDIA"
    | "MIN_HEIGHT"
    | "MIN_WIDTH"
    | "MIX_BLEND_MODE"
    | "OBJECT_FIT"
    | "OBJECT_POSITION"
    | "OPACITY"
    | "ORDER"
    | "ORPHANS"
    | "OUTLINE"
    | "OUTLINE_COLOR"
    | "OUTLINE_OFFSET"
    | "OUTLINE_STYLE"
    | "OUTLINE_WIDTH"
    | "OVERFLOW"
    | "OVERFLOW_WRAP"
    | "OVERFLOW_X"
    | "OVERFLOW_Y"
    | "PADDING"
    | "PADDING_BOTTOM"
    | "PADDING_LEFT"
    | "PADDING_RIGHT"
    | "PADDING_TOP"
    | "PAGE_BREAK_AFTER"
    | "PAGE_BREAK_BEFORE"
    | "PAGE_BREAK_INSIDE"
    | "PERSPECTIVE"
    | "PERSPECTIVE_ORIGIN"
    | "POINTER_EVENTS"
    | "POSITION"
    | "QUOTES"
    | "RESIZE"
    | "RIGHT"
    | "SRC"
    | "TAB_SIZE"
    | "TABLE_LAYOUT"
    | "TEXT_ALIGN"
    | "TEXT_ALIGN_LAST"
    | "TEXT_COMBINE_UPRIGHT"
    | "TEXT_DECORATION"
    | "TEXT_DECORATION_COLOR"
    | "TEXT_DECORATION_LINE"
    | "TEXT_DECORATION_STYLE"
    | "TEXT_INDENT"
    | "TEXT_JUSTIFY"
    | "TEXT_ORIENTATION"
    | "TEXT_OVERFLOW"
    | "TEXT_SHADOW"
    | "TEXT_TRANSFORM"
    | "TEXT_UNDERLINE_POSITION"
    | "TOP"
    | "TRANSFORM"
    | "TRANSFORM_ORIGIN"
    | "TRANSFORM_STYLE"
    | "TRANSITION"
    | "TRANSITION_DELAY"
    | "TRANSITION_DURATION"
    | "TRANSITION_PROPERTY"
    | "TRANSITION_TIMING_FUNCTION"
    | "UNICODE_BIDI"
    | "USER_SELECT"
    | "VERTICAL_ALIGN"
    | "VISIBILITY"
    | "WHITE_SPACE"
    | "WIDOWS"
    | "WIDTH"
    | "WORD_BREAK"
    | "WORD_SPACING"
    | "WORD_WRAP"
    | "WRITING_MODE"
    | "Z_INDEX";
  variable?: Variable;
  expression?: string;
}

/** Representation of a Delivery mode */
export interface DeliveryMode {
  /**
   * Code of the delivery mode
   * @example "premium-gross"
   */
  code?: string;
  /**
   * Name of the delivery mode
   * @example "Premium Delivery"
   */
  name?: string;
  /**
   * Description of the delivery mode
   * @example "1-2 business days"
   */
  description?: string;
  /** Representation of a Price */
  deliveryCost?: Price;
}

/** Representation of a Delivery mode list */
export interface DeliveryModeList {
  /** List of delivery modes */
  deliveryModes?: DeliveryMode[];
}

/** Representation of a Delivery Order Entry Group */
export interface DeliveryOrderEntryGroup {
  /** Representation of a Price */
  totalPriceWithTax?: Price;
  /** List of order entries */
  entries?: OrderEntry[];
  /**
   * Quantity of order entries in a group
   * @format int64
   */
  quantity?: number;
  /** Address object */
  deliveryAddress?: Address;
}

/** Amount due in the specified day range. */
export interface DueBalanceRange {
  /** Maximum and minimum limits of the day range. */
  dayRange?: DayRange;
  /**
   * Amount due in the specified range.
   * @example "$300.00"
   */
  amount?: string;
}

export interface EmarsysConfig {
  merchantId?: string;
  contactFieldId?: string;
  loyaltyConfig?: LoyaltyConfig;
  webPushConfig?: WebPushConfig;
  dataCollectingConsent?: string;
  webPushNotificationConsent?: string;
}

/** Records of item arrivals facilitate the tracking and management of item quantities, associated arrival times, and certainty levels. These records distinguish between guaranteed, estimated, and unknown arrival scenarios. */
export interface EntryArrivalSlot {
  /**
   * Represents the number of items expected to arrive.
   * @format double
   * @example 12
   */
  quantity?: number;
  /**
   * The date associated with the expected arrival slot.
   * @format date-time
   * @example "2024-01-18T17:40:46+05:30"
   */
  at?: string;
  /**
   * The accuracy of the arrival slot as estimated, or unknown.
   * @example "ESTIMATED"
   */
  accuracy?: "ESTIMATED" | "UNKNOWN";
  warehouse?: string;
}

/** Representation of an Entry Group */
export interface EntryGroup {
  /** List of order entries */
  entries?: OrderEntry[];
  /** List of child entry groups */
  entryGroups?: EntryGroup[];
  /**
   * Identifier of the entry group
   * @format int32
   * @example 1
   */
  entryGroupNumber?: number;
  /**
   * Label for the entry group
   * @example "Photo On The Go Package"
   */
  label?: string;
  /**
   * Indicates if the entry group is in an error state
   * @example true
   */
  erroneous?: boolean;
  /**
   * Indicates type of the group, possible values are STANDALONE, CONFIGURABLEBUNDLE or any customer implemented type for any new provider
   * @example "STANDALONE"
   */
  type?: string;
}

export interface EnumData {
  code?: string;
  name?: string;
}

/** Representation of a Facet */
export interface Facet {
  /** Name of the facet */
  name?: string;
  /**
   * Priority value of the facet
   * @format int32
   */
  priority?: number;
  /** Flag stating if facet is category facet */
  category?: boolean;
  /** Flag stating if facet is multiSelect */
  multiSelect?: boolean;
  /** Flag stating if facet is visible */
  visible?: boolean;
  /** List of top facet values */
  topValues?: FacetValue[];
  /** List of all facet values */
  values?: FacetValue[];
}

/** Representation of a Facet Value */
export interface FacetValue {
  /** Name of the facet value */
  name?: string;
  /**
   * Count of the facet value
   * @format int64
   */
  count?: number;
  /** Representation of a Search State */
  query?: SearchState;
  /** Flag stating if facet value is selected */
  selected?: boolean;
  images?: Image[];
  isProductImage?: boolean;
}

/** Representation of a Feature */
export interface Feature {
  /** Code of the feature */
  code?: string;
  /** Name of the feature */
  name?: string;
  /** Description of the feature */
  description?: string;
  /** Type of the feature */
  type?: string;
  /** Range number of the feature */
  range?: boolean;
  /** Flag defining it feature is comparable */
  comparable?: boolean;
  /** Representation of a Feature Unit */
  featureUnit?: FeatureUnit;
  /** List of feature values */
  featureValues?: FeatureValue[];
  pdpHidden?: boolean;
}

/** Representation of a Feature Unit */
export interface FeatureUnit {
  /** Symbol of the feature unit */
  symbol?: string;
  /** Name of the feature unit */
  name?: string;
  /** Type of the feature unit */
  unitType?: string;
}

/** Representation of a Feature Value */
export interface FeatureValue {
  /** Value of the feature */
  value?: string;
}

export interface FomoStats {
  /** @format int32 */
  currentlyLookingAtIt?: number;
  /** @format int32 */
  soldInLastMonth?: number;
  message?: string;
}

/** Representation of a Future Stock */
export interface FutureStock {
  /** Representation of a Stock */
  stock?: Stock;
  /**
   * Date of future stock
   * @format date-time
   */
  date?: string;
  /**
   * Date of future stock expressed in text value
   * @example "31/12/2056"
   */
  formattedDate?: string;
}

export interface GTMConfig {
  enabled?: boolean;
  integrationKey?: string;
  eventName?: string;
}

export interface GdmCdpConfiguration {
  domain?: string;
  businessUnitId?: string;
  sdkApplicationId?: string;
  enabled?: boolean;
}

/** Representation of a GeoPoint */
export interface GeoPoint {
  /**
   * Geopoint latitude
   * @format double
   */
  latitude?: number;
  /**
   * Geopoint longitude
   * @format double
   */
  longitude?: number;
}

export interface GiftCardList {
  list?: GiftCard[];
}

export interface GiftCardPayment {
  /** @format double */
  maxAmount?: number;
  /** Representation of a Price */
  amount?: Price;
  giftCard?: GiftCard;
}

export interface GiftCard {
  code?: string;
  /** Representation of a Price */
  originalAmount?: Price;
  /** Representation of a Price */
  usedAmount?: Price;
  /** Representation of a Price */
  leftAmount?: Price;
  userUid?: string;
  boughtByUid?: string;
  productCode?: string;
}

export interface GigyaConfig {
  apiKey?: string;
  dataCenter?: string;
  siteUid?: string;
}

export interface GooglePayBillingAddressConfig {
  phoneNumberRequired?: boolean;
  format?: string;
}

export interface GooglePayConfig {
  apiVersion?: string;
  apiVersionMinor?: string;
  googleMerchantId?: string;
  googleMerchantName?: string;
  environment?: string;
  emailRequired?: boolean;
  shippingAddressRequired?: boolean;
  billingAddressRequired?: boolean;
  shippingOptionRequired?: boolean;
  shippingAddressConfig?: GooglePayShippingAddressConfig;
  billingAddressConfig?: GooglePayBillingAddressConfig;
  /** @uniqueItems true */
  paymentMethodConfig?: GooglePayPaymentMethodConfig[];
  transactionInfo?: GooglePayTransactionInfo;
  transactionInfoString?: string;
  shippingAddressConfigString?: string;
  billingAddressConfigString?: string;
  callbackIntents?: string;
}

export interface GooglePayIntermediateAddress {
  administrativeArea?: string;
  countryCode?: string;
  locality?: string;
  postalCode?: string;
}

export interface GooglePayIntermediateShippingOption {
  id?: string;
}

export interface GooglePayPaymentMethodConfig {
  paymentType?: string;
  tokenType?: string;
  /** @uniqueItems true */
  allowedAuthMethodsSet?: string[];
  /** @uniqueItems true */
  allowedCardNetworkSet?: string[];
  allowedAuthMethods?: string;
  allowedCardNetwork?: string;
  paymentProcessor?: string;
  paymentProcessorMerchantId?: string;
  billingAddressRequired?: boolean;
}

export interface GooglePayResponseAddress {
  name?: string;
  postalCode?: string;
  countryCode?: string;
  phoneNumber?: string;
  address1?: string;
  address2?: string;
  address3?: string;
  locality?: string;
  administrativeArea?: string;
  sortingCode?: string;
}

export interface GooglePayResponsePaymentInfo {
  cardDetails?: string;
  cardNetwork?: string;
  billingAddress?: GooglePayResponseAddress;
}

export interface GooglePayResponsePaymentMethodTokenization {
  type?: string;
  token?: string;
}

export interface GooglePayResponsePaymentMethod {
  type?: string;
  description?: string;
  info?: GooglePayResponsePaymentInfo;
  tokenizationData?: GooglePayResponsePaymentMethodTokenization;
}

export interface GooglePayResponsePayment {
  apiVersion?: string;
  apiVersionMinor?: string;
  email?: string;
  paymentMethodData?: GooglePayResponsePaymentMethod;
  shippingAddress?: GooglePayResponseAddress;
  shippingOptionData?: GooglePayIntermediateShippingOption;
  shippingAddressEnabled?: boolean;
  shippingOptionsEnabled?: boolean;
}

export interface GooglePayShippingAddressConfig {
  /** @uniqueItems true */
  allowedCountryCodes?: string[];
  phoneNumberRequired?: boolean;
}

export interface GooglePayShippingMethodConfig {
  shippingOptionsParam?: GooglePayShippingOptionParameters;
  shippingCost?: Record<string, object>;
}

export interface GooglePayShippingOptionParameters {
  /** @uniqueItems true */
  shippingOptions?: GooglePayShippingOptions[];
  defaultSelectedOptionId?: string;
}

export interface GooglePayShippingOptions {
  id?: string;
  label?: string;
  description?: string;
  totalCartTax?: string;
}

export interface GooglePayTransactionDisplayItem {
  label?: string;
  type?: string;
  price?: string;
}

export interface GooglePayTransactionInfo {
  currencyCode?: string;
  countryCode?: string;
  transactionId?: string;
  totalPriceStatus?: string;
  totalPrice?: string;
  totalPriceLabel?: string;
  checkoutOption?: string;
  /** @uniqueItems true */
  displayItems?: GooglePayTransactionDisplayItem[];
}

/** Representation of an Image */
export interface Image {
  /** Type of the image, can be PRIMARY or GALLERY */
  imageType?: "PRIMARY" | "GALLERY";
  /** Format of the image, can be zoom, product, thumbnail, store, cartIcon, etc. */
  format?: string;
  /** URL address of the image */
  url?: string;
  /** Tooltip content which is visible while image mouse hovering */
  altText?: string;
  /**
   * Index of the image while displayed in gallery
   * @format int32
   */
  galleryIndex?: number;
}

/** Representation of a Language */
export interface Language {
  /** iso code of the language */
  isocode?: string;
  /** name of the language */
  name?: string;
  /** name the language in native form */
  nativeName?: string;
  /** true/false indicator when the language is active */
  active?: boolean;
}

/** Lists all available languages (all languages used for a particular store). If the list of languages for a base store is empty, a list of all languages available in the system will be returned */
export interface LanguageList {
  /** This is the list of Language fields that should be returned in the response body */
  languages?: Language[];
}

export interface LocalizedLabel {
  bundle?: string;
  key?: string;
  value?: string;
}

export interface LoyaltyConfig {
  appId?: string;
  planId?: string;
  customerId?: string;
  contactId?: string;
  timestamp?: string;
  token?: string;
}

export interface LoyaltyPlanType {
  isocode?: string;
  selected?: boolean;
}

/** List of users to assign to customer group. */
export interface MemberList {
  /** List of member */
  members?: Principal[];
}

export interface MerchantSession {
  /** @format int64 */
  epochTimestamp?: number;
  /** @format int64 */
  expiresAt?: number;
  merchantSessionIdentifier?: string;
  nonce?: string;
  merchantIdentifier?: string;
  domainName?: string;
  displayName?: string;
  signature?: string;
}

export interface MonthExpensesSummary {
  /** @format double */
  amountSpent?: number;
  /** @format double */
  amountSpentPercentage?: number;
  month?: string;
}

export interface MultiValueMapStringString {
  all?: Record<string, string>;
  empty?: boolean;
  [key: string]: any;
}

export interface MyRecipesSummary {
  recipeCodes?: string[];
}

export interface NestedFlexibleRuleData {
  flexibleRule?: string;
  ruleSet?: RuleSet;
  innerFlexibleRules?: NestedFlexibleRuleData[];
}

export interface NotificationList {
  notifications?: Notification[];
}

export interface Notification {
  code?: string;
  headline?: string;
  description?: string;
  /** @format date-time */
  date?: string;
  /** User's object. */
  user?: User;
  markedAsRead?: boolean;
  url?: string;
  contentType?: string;
}

export interface NutritionFactsEntry {
  /** @format double */
  amount?: number;
  /** @format int32 */
  dailyPercent?: number;
  unknown?: boolean;
  /** @format int32 */
  index?: number;
  nutrition?: Nutrition;
}

export interface NutritionFacts {
  /** @format int32 */
  calories?: number;
  /** @format int32 */
  amountPerContainer?: number;
  servings?: NutritionServing[];
  entries?: NutritionFactsEntry[];
}

export interface NutritionServing {
  code?: string;
  name?: string;
  /** @format int32 */
  amount?: number;
}

export interface Nutrition {
  code?: string;
  name?: string;
  main?: boolean;
  /** @format double */
  dailyAmount?: number;
  unit?: string;
  /** @format int32 */
  level?: number;
  parent?: Nutrition;
}

/** Representation of an Opening schedule */
export interface OpeningSchedule {
  /** Name of the opening schedule */
  name?: string;
  /** Code of the opening schedule */
  code?: string;
  /** List of weekday opening days */
  weekDayOpeningList?: WeekdayOpeningDay[];
  /** List of special opening days */
  specialDayOpeningList?: SpecialOpeningDay[];
}

/** Representation of a order. Note that sapBillingAddress is mutually exclusive with paymentInfo.billingAddress, which is used when the billing address is created concurrently with the paymentInfo. sapBillingAddress is used when there is a need to save the billing address, but the related paymentInfo has not been created yet. */
export interface Order {
  /** Code number of order */
  code?: string;
  /** Flag stating iv value is net-value */
  net?: boolean;
  /** Representation of a Price */
  totalPriceWithTax?: Price;
  /** Representation of a Price */
  totalPrice?: Price;
  /** Representation of a Price */
  totalTax?: Price;
  /** Representation of a Price */
  subTotal?: Price;
  /** Representation of a Price */
  deliveryCost?: Price;
  /** List of order entries */
  entries?: OrderEntry[];
  /** List of entry groups */
  entryGroups?: EntryGroup[];
  /** @format int32 */
  totalItems?: number;
  /** Representation of a Delivery mode */
  deliveryMode?: DeliveryMode;
  /** Address object */
  deliveryAddress?: Address;
  /** Payment details object */
  paymentInfo?: PaymentDetails;
  /** List of applied order promotions */
  appliedOrderPromotions?: PromotionResult[];
  /** List of applied product promotions */
  appliedProductPromotions?: PromotionResult[];
  /** Representation of a Price */
  productDiscounts?: Price;
  /** Representation of a Price */
  orderDiscounts?: Price;
  /** Representation of a Price */
  totalDiscounts?: Price;
  /** Site */
  site?: string;
  /** Store */
  store?: string;
  /** Guest user id identifier */
  guid?: string;
  /** Flag showing if order is calculated */
  calculated?: boolean;
  /** List of applied vouchers */
  appliedVouchers?: Voucher[];
  /** Representation of a Principal webservice DTO used for defining User data types */
  user?: Principal;
  /** List of pickup order entry group */
  pickupOrderGroups?: PickupOrderEntryGroup[];
  /** List of delivery order entries group */
  deliveryOrderGroups?: DeliveryOrderEntryGroup[];
  /**
   * Quantity of pickup items
   * @format int64
   */
  pickupItemsQuantity?: number;
  /**
   * Quantity of delivery items
   * @format int64
   */
  deliveryItemsQuantity?: number;
  /** Customer requested date for order retrieval */
  requestedRetrievalAt?: string;
  /** Address object */
  sapBillingAddress?: Address;
  /**
   * Email of customer.
   * @example "xxx.yy@zz.com"
   */
  sapCustomerEmail?: string;
  giftCardPayments?: GiftCardPayment[];
  ppsLoyaltyCard?: PPSLoyaltyCard;
  promotionNameList?: string[];
  promotionRecommendationList?: string[];
  /** Representation of a Price */
  totalPriceWithoutDiscount?: Price;
  placedBy?: string;
  shipSeparately?: boolean;
  /** Representation of a Point of service */
  returnStore?: PointOfService;
  /**
   * Date of order creation
   * @format date-time
   */
  created?: string;
  /** Status of order */
  status?: string;
  /** Status display */
  statusDisplay?: string;
  /** Flag showing if customer is Guest customer */
  guestCustomer?: boolean;
  /** List of consignment */
  consignments?: Consignment[];
  /** Order delivery status */
  deliveryStatus?: string;
  /** Order delivery status display */
  deliveryStatusDisplay?: string;
  /** List of unconsigned order entries */
  unconsignedEntries?: OrderEntry[];
  /**
   * Boolean flag showing if order is cancellable
   * @example true
   */
  cancellable?: boolean;
  /**
   * Boolean flag showing if order is returnable
   * @example true
   */
  returnable?: boolean;
  /** @format int32 */
  totalUnitCount?: number;
  /** Purchase order number */
  purchaseOrderNumber?: string;
  /** User's object. */
  orgCustomer?: User;
  /** Cost center object. */
  costCenter?: B2BCostCenter;
  /** Results of permissions associated with the order */
  permissionResults?: OrderApprovalPermissionResult[];
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /** CDP Orders Extended Attributes */
  cdpOrderExtendedAttributes?: CdpOrderExtendedAttributes;
  /** Address object */
  paymentAddress?: Address;
}

/** Details of one specific order approval */
export interface OrderApproval {
  /**
   * Code that identifies the approval.
   * @example "00000005"
   */
  code: string;
  /** Representation of a order. Note that sapBillingAddress is mutually exclusive with paymentInfo.billingAddress, which is used when the billing address is created concurrently with the paymentInfo. sapBillingAddress is used when there is a need to save the billing address, but the related paymentInfo has not been created yet. */
  order?: Order;
  /** Boolean flag which states whether an approval decision is required. */
  approvalDecisionRequired?: boolean;
  /** Customer approval records related to this order approval. */
  customerOrderApprovalRecords?: OrderApprovalRecord[];
  /** Merchant approval records related to this order approval. */
  merchantOrderApprovalRecords?: OrderApprovalRecord[];
  /** Representation of a Trigger */
  trigger?: Trigger;
}

/** The order approval decision. The approval decision field is mandatory, and the approval comment field is mandatory if the decision is 'rejected'. */
export interface OrderApprovalDecision {
  /**
   * Decision from the approver when approving/rejecting an order. Typical decisions are: APPROVE, REJECT
   * @example "REJECT"
   */
  decision: string;
  /**
   * Any comments the approver (or the workflow system) adds when approving/rejecting an order.
   * @example "Rejected because montly budget was exceeded"
   */
  comment?: string;
}

/** Representation of a Order Approval List */
export interface OrderApprovalList {
  /** List of Order Approvals */
  orderApprovals: OrderApproval[];
  /** List of sorts */
  sorts: Sort[];
  /** Representation of a search results pagination */
  pagination: DeprecatedPagination;
}

/** Order Approval Permission object. */
export interface OrderApprovalPermission {
  /**
   * Boolean flag of whether Order Approval Permission is active
   * @example true
   */
  active?: boolean;
  /** Request body fields required and optional to operate on Order Approval Permission Type data. Typical permission types are: B2BBudgetExceededPermission, B2BOrderThresholdTimespanPermission and B2BOrderThresholdPermission */
  orderApprovalPermissionType?: OrderApprovalPermissionType;
  /**
   * Code of the Order Approval Permission
   * @example "Rustic_10K_USD_MONTH"
   */
  code: string;
  /** Representation of a Currency */
  currency?: Currency;
  /**
   * Period range of the Order Approval Permission, used for type B2BOrderThresholdTimespanPermission
   * @example "MONTH"
   */
  periodRange?: "DAY" | "WEEK" | "MONTH" | "QUARTER" | "YEAR";
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /**
   * Threshold value of the Order Approval Permission, used for type B2BOrderThresholdPermission and B2BOrderThresholdTimespanPermission
   * @format double
   * @example 10000
   */
  threshold?: number;
  /**
   * Boolean flag of whether the user is selected
   * @example true
   */
  selected?: boolean;
}

/** Representation of a Order Approval Permission List */
export interface OrderApprovalPermissionList {
  /** List of Order Approval Permissions */
  orderApprovalPermissions: OrderApprovalPermission[];
  /** List of sorts */
  sorts: Sort[];
  /** Representation of a search results pagination */
  pagination: DeprecatedPagination;
}

/** Details of an order approval permission result related to an order */
export interface OrderApprovalPermissionResult {
  /** Name of the approver responsible for this permission result. */
  approverName?: string;
  /**
   * Any comments the approver added to the approval item.
   * @example "The order is rejected due to insufficient budget"
   */
  approverNotes?: string;
  /** Request body fields required and optional to operate on Order Approval Permission Type data. Typical permission types are: B2BBudgetExceededPermission, B2BOrderThresholdTimespanPermission and B2BOrderThresholdPermission */
  permissionType?: OrderApprovalPermissionType;
  /**
   * Status of the order approval.
   * @example "Pending approval"
   */
  statusDisplay?: string;
}

/** Request body fields required and optional to operate on Order Approval Permission Type data. Typical permission types are: B2BBudgetExceededPermission, B2BOrderThresholdTimespanPermission and B2BOrderThresholdPermission */
export interface OrderApprovalPermissionType {
  /**
   * Code of the Order Approval Permission Type
   * @example "B2BOrderThresholdTimespanPermission"
   */
  code: string;
  /**
   * Name of the Order Approval Permission Type
   * @example "Allowed Order Threshold (per timespan)"
   */
  name?: string;
}

/** Representation of an Order Approval Permission Type list */
export interface OrderApprovalPermissionTypeList {
  /** List of Order Approval Permission Types */
  orderApprovalPermissionTypes: OrderApprovalPermissionType[];
}

/** Details of one order approval record */
export interface OrderApprovalRecord {
  /** List of permission types related to this approval record. */
  permissionTypes?: OrderApprovalPermissionType[];
  /** Representation of a Principal webservice DTO used for defining User data types */
  approver?: Principal;
  /**
   * Status of the order approval.
   * @example "Pending approval"
   */
  statusDisplay?: string;
  /**
   * Any comments the approver (or the workflow system) added to the approval item.
   * @example "Submitted for approval"
   */
  comments?: string;
}

/**
 * Request body parameter that contains details such as the quantity of product (quantity), and the pickup store name (deliveryPointOfService.name)
 *
 * The DTO is in XML or .json format.
 */
export interface OrderEntry {
  /**
   * Entry number of the order entry
   * @format int32
   */
  entryNumber?: number;
  /**
   * Quantity number of items in order entry
   * @format int64
   */
  quantity?: number;
  /** Representation of a Price */
  basePrice?: Price;
  /** Representation of a Price */
  totalPrice?: Price;
  /** Representation of a Product */
  product?: Product;
  /** Flag defining if order entry item is updateable */
  updateable?: boolean;
  /** Representation of a Delivery mode */
  deliveryMode?: DeliveryMode;
  /** Configuration info of order entry */
  configurationInfos?: ConfigurationInfo[];
  /** List of aggregated status information per entry, relevant if the entry is configurable and its configuration contains one or many issues in different severities. Note that configurators typically raise such issues only in case the parent document is changeable. In this case the issues (depending on their severity) need to be fixed before a checkout can be done. This means this segment can be present for a cart entry, for order entries it will always be empty */
  statusSummaryList?: StatusSummary[];
  /** Representation of a Point of service */
  deliveryPointOfService?: PointOfService;
  /** Representation of a Price */
  cancelledItemsPrice?: Price;
  /**
   * Quantity number of cancellable items in order entry
   * @format int64
   * @example 5
   */
  cancellableQuantity?: number;
  /** Representation of a Price */
  returnedItemsPrice?: Price;
  /**
   * Quantity number of returnable items in order entry
   * @format int64
   * @example 5
   */
  returnableQuantity?: number;
  /** List of item arrival slot */
  arrivalSlots?: EntryArrivalSlot[];
  /** List of order entry comments. */
  comments?: Comment[];
  formattedReleaseDate?: string;
  productPersonalization?: ProductPersonalization;
  recipe?: Recipe;
  url?: string;
  /** @format int64 */
  quantityAllocated?: number;
  /** @format int64 */
  quantityUnallocated?: number;
  /** @format int64 */
  quantityCancelled?: number;
  /** @format int64 */
  quantityPending?: number;
  /** @format int64 */
  quantityShipped?: number;
  /** @format int64 */
  quantityReturned?: number;
  bonusItem?: boolean;
  bonusItemDescription?: string;
  /** Representation of a Price */
  tradeinCredit?: Price;
  /** Representation of a Product */
  tradeinVehicle?: Product;
  tradeinImages?: Image[];
  /** Representation of a Point of service */
  sapSource?: PointOfService;
}

/** List of entries containing the amount to add and the product code or the entryNumber. */
export interface OrderEntryList {
  /** List of order entries */
  orderEntries?: OrderEntry[];
}

/** Representation of an Order History */
export interface OrderHistory {
  /** Code of Order History */
  code?: string;
  /** Status of Order History */
  status?: string;
  /** Status display */
  statusDisplay?: string;
  /**
   * Date of placing order
   * @format date-time
   */
  placed?: string;
  /** Guest user identifier */
  guid?: string;
  /** Representation of a Price */
  total?: Price;
  /** Cost center object. */
  costCenter?: B2BCostCenter;
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /** Purchase order number */
  purchaseOrderNumber?: string;
  /** User's object. */
  orgCustomer?: User;
}

/** Representation of an Order History List */
export interface OrderHistoryList {
  /** List of order history items */
  orders?: OrderHistory[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
  /** List of facets */
  facets?: Facet[];
}

export interface OrderImproveParameter {
  /** Apply Random Discount */
  applyRandomDiscount?: boolean;
  /** Currency */
  currency: string;
  /** Product Catalog */
  productCatalog: string;
}

/** Representation of an Order Status Update Element */
export interface OrderStatusUpdateElement {
  /** Code of update element of order status */
  code?: string;
  /** Status of update element */
  status?: string;
  /** BaseSite identifier */
  baseSiteId?: string;
}

/** Representation of an Order Status Update Element List */
export interface OrderStatusUpdateElementList {
  /** List of order status update elements */
  orderStatusUpdateElements?: OrderStatusUpdateElement[];
}

/** Data object that contains information necessary for user creation */
export interface OrgCustomerCreation {
  /**
   * Email of the user
   * @example "akiro.nakamura@rustic-hw.com"
   */
  email?: string;
  /**
   * First name of the user
   * @example "Akiro"
   */
  firstName?: string;
  /**
   * Last name of the user
   * @example "Nakamura"
   */
  lastName?: string;
  /**
   * Code of the user's title
   * @example "mr"
   */
  titleCode?: string;
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /** List of organizational approvers */
  roles?: string[];
}

/** Data object which contains information necessary for user modification */
export interface OrgCustomerModification {
  /**
   * Email of the user
   * @example "akiro.nakamura@rustic-hw.com"
   */
  email?: string;
  /**
   * First name of the user
   * @example "Akiro"
   */
  firstName?: string;
  /**
   * Last name of the user
   * @example "Nakamura"
   */
  lastName?: string;
  /**
   * Code of the user's title
   * @example "mr"
   */
  titleCode?: string;
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /** List of organizational approvers */
  roles?: string[];
  /**
   * Boolean flag of whether the user is active/enabled or not
   * @example true
   */
  active?: boolean;
  /** Password of the user */
  password?: string;
}

/** Representation of an organizational document. */
export interface OrgDocument {
  /**
   * Unique identifier for the organizational document.
   * @example "DOC-01234"
   */
  id: string;
  /** Representation of an organizational document type. */
  orgDocumentType?: OrgDocumentType;
  /**
   * Organizational document status. Possible values are: open, closed.
   * @example "open"
   */
  status: string;
  /**
   * Creation date for the organizational document.
   * @example "2022-04-14"
   */
  createdAtDate?: string;
  /**
   * Due date for the organizational document.
   * @example "2022-06-18"
   */
  dueAtDate?: string;
  /**
   * Original amount due for the organizational document, formatted as per the selected currency.
   * @example "$1230.45"
   */
  formattedAmount: string;
  /**
   * Original amount due for the organizational document.
   * @example 1230.45
   */
  amount: number;
  /**
   * Open amount due for the organizational document, formatted as per the selected currency.
   * @example "$430.45"
   */
  formattedOpenAmount?: string;
  /**
   * Open amount due for the organizational document.
   * @example 430.45
   */
  openAmount?: number;
  /** Representation of a Currency */
  currency: Currency;
  /** Attachments associated to the organizational document. */
  attachments?: OrgDocumentAttachment[];
}

/** Attachments associated to the organizational document. */
export interface OrgDocumentAttachment {
  /**
   * Organizational document attachment identifier.
   * @example "INPG-00100001"
   */
  id?: string;
}

/** Representation of a list of organizational documents for the organizational unit. */
export interface OrgDocumentList {
  /** List of organizational documents. */
  orgDocuments: OrgDocument[];
  /** List of sort codes */
  sorts?: Sort[];
  /** List of organizational document types. */
  orgDocumentTypes?: OrgDocumentType[];
  /** Representation of a search results pagination */
  pagination: DeprecatedPagination;
}

/** Representation of an organizational document type. */
export interface OrgDocumentType {
  /**
   * Organizational document type code.
   * @example "PURCHASE_ORDER"
   */
  code: string;
  /**
   * Organizational document type name.
   * @example "Purchase Order"
   */
  name?: string;
}

/** Reference to organizational unit. */
export interface OrgUnitReference {
  /**
   * Identifier of the organizational unit.
   * @example "Pronto"
   */
  uid: string;
  /**
   * Name of the organizational unit.
   * @example "Pronto"
   */
  name?: string;
}

/** Organizational unit user group object. */
export interface OrgUnitUserGroup {
  /** Unique user identifier */
  uid?: string;
  /** Name of the user */
  name?: string;
  /** List of members */
  members?: Principal[];
  /** List of subgroups */
  subGroups?: UserGroup[];
  /**
   * Number of members
   * @format int32
   */
  membersCount?: number;
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  /** Order approval permission of the user group */
  permissions?: OrderApprovalPermission[];
  /** List of Roles */
  roles?: string[];
  /**
   * Boolean flag of whether a user group is selected or not
   * @example true
   */
  selected?: boolean;
}

/** Representation of an user list used in organizational units */
export interface OrgUnitUserGroupList {
  /** List of organizational unit user groups */
  orgUnitUserGroups: OrgUnitUserGroup[];
  /** List of sorts */
  sorts: Sort[];
  /** Representation of a search results pagination */
  pagination: DeprecatedPagination;
}

/** Representation of an user list used in organizational units */
export interface OrgUnitUserList {
  /** List of users */
  users: User[];
  /** List of sorts */
  sorts: Sort[];
  /** Representation of a search results pagination */
  pagination: DeprecatedPagination;
}

/** Data object that contains information necessary to apply user registration */
export interface OrgUserRegistrationData {
  /**
   * Code of the user's title
   * @example "mr"
   */
  titleCode?: string;
  /**
   * First name of the user
   * @example "akiro"
   */
  firstName: string;
  /**
   * Last name of the user
   * @example "nakamura"
   */
  lastName: string;
  /**
   * Email of the user
   * @example "akiro.nakamura@rustic-hw.com"
   */
  email: string;
  /**
   * Contains info to approver, usually composed by UI with a template
   * @example "Please create a new account for me. Department: Ground support; Position: Chief safeguard; Report to: Steve Jackson."
   */
  message?: string;
  /**
   * Authentication identifier of a new B2B customer registration. Only needed when OTP for registration is enabled.
   * @example "<REG[nZbnrnhMWy2uBbzKWU/SQRVBZ7mJaiXX9/87PegvovM=]>"
   */
  verificationTokenId?: string;
  /**
   * Code included in the email sent to the customer to be registered. Only needed when OTP for registration is enabled.
   * @example "W2Lihg36"
   */
  verificationTokenCode?: string;
}

export interface PPSCustomerLoyaltyCard {
  active?: boolean;
  code?: string;
  earnedLoyaltyPoints?: string;
}

export interface PPSLoyaltyCard {
  code?: string;
  earnedLoyaltyPoints?: string;
  pointsToRedeem?: string;
}

export interface PPSProductPrice {
  productCode?: string;
  /** Representation of a Price */
  price?: Price;
}

/** Representation of a Packaging Information */
export interface PackagingInfo {
  width?: string;
  height?: string;
  length?: string;
  grossWeight?: string;
  insuredValue?: string;
  dimensionUnit?: string;
  weightUnit?: string;
}

/** Object contains information required for creating and sending a token to restore a forgotten password. */
export interface PasswordRestoreTokenInput {
  /**
   * User login identifier. Target to receive the token.
   * @example "keenreviewer@sap.com"
   */
  loginId: string;
}

/** Payment details object */
export interface PaymentDetails {
  /** Unique identifier of payment detail */
  id?: string;
  /** Name of account holder */
  accountHolderName?: string;
  /** Representation of a Card Type */
  cardType?: CardType;
  /** Payment card number */
  cardNumber?: string;
  /** Start month from which payment is valid */
  startMonth?: string;
  /** Start year from which payment is valid */
  startYear?: string;
  /** Month of expiration of payment */
  expiryMonth?: string;
  /** Year of expiration of payment */
  expiryYear?: string;
  /** Issue number */
  issueNumber?: string;
  /** Identifier of subscription */
  subscriptionId?: string;
  /** Flag to mark if payment is saved one */
  saved?: boolean;
  /** Flag to mark if payment the default one */
  defaultPayment?: boolean;
  /** Address object */
  billingAddress?: Address;
  /** Payment Method */
  sapPaymentMethod?: SAPPaymentMethod;
}

/** Representation of a Payment details list */
export interface PaymentDetailsList {
  /** List of payment details */
  payments?: PaymentDetails[];
}

/** Representation of a Payment Mode */
export interface PaymentMode {
  /** Payment mode code */
  code?: string;
  /** Payment mode name */
  name?: string;
  /** Payment mode description */
  description?: string;
}

/** Representation of a Payment Mode List */
export interface PaymentModeList {
  /** List of payment modes */
  paymentModes?: PaymentMode[];
}

export interface PaymentRequest {
  postUrl?: string;
  parameters?: Record<string, string>;
  mappingLabels?: Record<string, string>;
}

export interface PickUpInStore {
  stores?: PointOfServiceStock[];
  /** Representation of a Product */
  product?: Product;
}

/** Representation of a Pickup Order Entry Group */
export interface PickupOrderEntryGroup {
  /** Representation of a Price */
  totalPriceWithTax?: Price;
  /** List of order entries */
  entries?: OrderEntry[];
  /**
   * Quantity of order entries in a group
   * @format int64
   */
  quantity?: number;
  /** Representation of a Point of service */
  deliveryPointOfService?: PointOfService;
  /**
   * Distance calculated to pickup place
   * @format double
   */
  distance?: number;
}

/** Representation of a Point of service */
export interface PointOfService {
  /**
   * Name of the point of service
   * @example "Misato"
   */
  name?: string;
  /** Display name of the point of service */
  displayName?: string;
  /** Url address of the point of service */
  url?: string;
  /** Description of the point of service */
  description?: string;
  /** Representation of an Opening schedule */
  openingHours?: OpeningSchedule;
  /** Store content of given point of service */
  storeContent?: string;
  /** List of features for a given point of service */
  features?: Record<string, string>;
  /** Representation of a GeoPoint */
  geoPoint?: GeoPoint;
  /** Distance to the point of service as text value */
  formattedDistance?: string;
  /**
   * Distance to the point of service as number value
   * @format double
   */
  distanceKm?: number;
  /** Representation of an Image */
  mapIcon?: Image;
  /** Address object */
  address?: Address;
  /** Collection of images associated with a point of service */
  storeImages?: Image[];
  /** Instructions used for picking up an order in store */
  pickUpInStoreInstructions?: string;
  warehouseCodes?: string[];
}

/** Representation of a Point of Service List */
export interface PointOfServiceList {
  /** List of points of service */
  pointOfServices?: PointOfService[];
}

/** Representation of a Point Of Service Stock */
export interface PointOfServiceStock {
  /**
   * Name of the point of service
   * @example "Misato"
   */
  name?: string;
  /** Display name of the point of service */
  displayName?: string;
  /** Url address of the point of service */
  url?: string;
  /** Description of the point of service */
  description?: string;
  /** Representation of an Opening schedule */
  openingHours?: OpeningSchedule;
  /** Store content of given point of service */
  storeContent?: string;
  /** List of features for a given point of service */
  features?: Record<string, string>;
  /** Representation of a GeoPoint */
  geoPoint?: GeoPoint;
  /** Distance to the point of service as text value */
  formattedDistance?: string;
  /**
   * Distance to the point of service as number value
   * @format double
   */
  distanceKm?: number;
  /** Representation of an Image */
  mapIcon?: Image;
  /** Address object */
  address?: Address;
  /** Collection of images associated with a point of service */
  storeImages?: Image[];
  /** Instructions used for picking up an order in store */
  pickUpInStoreInstructions?: string;
  warehouseCodes?: string[];
  /** Representation of a Stock */
  stockInfo?: Stock;
}

/** Representation of a Price */
export interface Price {
  /**
   * Currency iso format
   * @example "USD"
   */
  currencyIso?: string;
  /** Value of price in BigDecimal format */
  value?: number;
  /** Type of the price */
  priceType?: "BUY" | "FROM";
  /** Value of price formatted */
  formattedValue?: string;
  /**
   * Minimum quantity of the price value
   * @format int64
   */
  minQuantity?: number;
  /**
   * Maximum quantity of the price value
   * @format int64
   */
  maxQuantity?: number;
}

/** Representation of a Price Range */
export interface PriceRange {
  /** Representation of a Price */
  maxPrice?: Price;
  /** Representation of a Price */
  minPrice?: Price;
}

/** Representation of a Principal webservice DTO used for defining User data types */
export interface Principal {
  /** Unique user identifier */
  uid?: string;
  /** Name of the user */
  name?: string;
}

/** Representation of a Product */
export interface Product {
  /** Code of the product */
  code?: string;
  /** Name of the product */
  name?: string;
  /** Url address of the product */
  url?: string;
  /** Description of the product */
  description?: string;
  /** Flag defining if product is purchasable */
  purchasable?: boolean;
  /** Representation of a Stock */
  stock?: Stock;
  /** List of future stocks */
  futureStocks?: FutureStock[];
  /** Flag defining if product is available for pickup */
  availableForPickup?: boolean;
  /**
   * Rating number of average value
   * @format double
   */
  averageRating?: number;
  /**
   * Number of reviews associated with the product
   * @format int32
   */
  numberOfReviews?: number;
  /** Product summary */
  summary?: string;
  /** Data of product manufacturer */
  manufacturer?: string;
  /** Variant type of the product */
  variantType?: string;
  /** Representation of a Price */
  price?: Price;
  /** Representation of a Unit */
  sapUnit?: SAPUnit;
  /** Information about base product */
  baseProduct?: string;
  /** List of images linked to product */
  images?: Image[];
  /** List of categories product belongs to */
  categories?: Category[];
  /** List of reviews associated with the product */
  reviews?: Review[];
  /** List of classifications related to the product */
  classifications?: Classification[];
  /** List of potential promotions related to the product */
  potentialPromotions?: Promotion[];
  /** List of variant options related to the product */
  variantOptions?: VariantOption[];
  /** List of base options related to the product */
  baseOptions?: BaseOption[];
  /** Flag stating if volume price should be displayed */
  volumePricesFlag?: boolean;
  /** List of volume prices */
  volumePrices?: Price[];
  /** List of product references */
  productReferences?: ProductReference[];
  /** List of variant matrixes associated with the product */
  variantMatrix?: VariantMatrixElement[];
  /** Representation of a Price Range */
  priceRange?: PriceRange;
  /** Flag stating if product is multidimensional */
  multidimensional?: boolean;
  /** Configurator type related to the product */
  configuratorType?: string;
  /** Flag stating if product is configurable */
  configurable?: boolean;
  /**
   * Tags associated with the product
   * @uniqueItems true
   */
  tags?: string[];
  /**
   * Flag specifies whether product can be added to cart. When addToCartDisabled=true, the product is not allowed to be added into cart and the reason is explained through sapAddToCartDisabledMessage; when addToCartDisabled=false, the product is allowed to be added into cart.
   * @example true
   */
  sapAddToCartDisabled?: boolean;
  /**
   * Message shows why product can not be added to cart.
   * @example "'EF-S 60mm f/2.8 USM Macro' is not available with 'EOS450D + 18-55 IS Kit'"
   */
  sapAddToCartDisabledMessage?: string;
  firstVariantCode?: string;
  firstVariantImage?: string;
  badges?: ProductBadge[];
  personalizationOption?: ProductPersonalizationOption;
  /** Representation of a Price */
  ppsPrice?: Price;
  modelName?: string;
  vin?: string;
  modelVariant?: string;
  exteriorColor?: string;
  interiorColor?: string;
  vehicleIndicators?: VehicleIndicators;
  /** Representation of an Image */
  sustainabilityImage?: Image;
  fomoStats?: FomoStats;
  contentUnit?: string;
  /** @format double */
  numberContentUnits?: number;
}

export interface ProductBadge {
  code?: string;
  descriptions?: string[];
  iconUrl?: string;
  pdpPageHidden?: boolean;
  categoryPageHidden?: boolean;
}

/** Representation of a Product Express Update Element */
export interface ProductExpressUpdateElement {
  /** Code of product express update element */
  code?: string;
  /** Catalog identifier */
  catalogId?: string;
  /** Catalog version */
  catalogVersion?: string;
}

/** Representation of a Product Express Update Element List */
export interface ProductExpressUpdateElementList {
  /** List of product express update element */
  productExpressUpdateElements?: ProductExpressUpdateElement[];
}

/** Representation of a Product Future Stocks */
export interface ProductFutureStocks {
  /**
   * Product identifier
   * @example "3318057"
   */
  productCode?: string;
  /** List of future stocks */
  futureStocks?: FutureStock[];
}

/** Representation of a Product Future Stocks List */
export interface ProductFutureStocksList {
  /** List of product future stocks */
  productFutureStocks?: ProductFutureStocks[];
}

/** Representation of a Product List */
export interface ProductList {
  /** List of products */
  products?: Product[];
  /** Catalog of product list */
  catalog?: string;
  /** Version of product list */
  version?: string;
  /**
   * Total product count
   * @format int32
   */
  totalProductCount?: number;
  /**
   * Total page count
   * @format int32
   */
  totalPageCount?: number;
  /**
   * Number of current page
   * @format int32
   */
  currentPage?: number;
}

export interface ProductPersonalizationOption {
  personalizationArea?: number[];
  imageFormat?: string;
}

export interface ProductPersonalization {
  /** Representation of an Image */
  customImage?: Image;
  customImagePosition?: string;
  customText?: string;
  customTextPosition?: string;
  customTextSize?: string;
  customTextColor?: string;
}

/** Representation of a Product Reference */
export interface ProductReference {
  /** Reference type */
  referenceType?: string;
  /** Reference description */
  description?: string;
  /**
   * Reference quantity
   * @format int32
   */
  quantity?: number;
  /** Representation of a Product */
  target?: Product;
  /** Flag stating if product reference is preselected */
  preselected?: boolean;
}

/** Representation of a Product Reference List */
export interface ProductReferenceList {
  /** List of product references */
  references?: ProductReference[];
}

/** Representation of a Product Search Page */
export interface ProductSearchPage {
  /** Free text search */
  freeTextSearch?: string;
  /** Code of category */
  categoryCode?: string;
  /** Redirect url address keyword */
  keywordRedirectUrl?: string;
  /** Representation of a Spell Checker Suggestion */
  spellingSuggestion?: SpellingSuggestion;
  /** List of products */
  products?: Product[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
  /** Representation of a Search State */
  currentQuery?: SearchState;
  /** List of breadcrumbs info */
  breadcrumbs?: Breadcrumb[];
  /** List of facets */
  facets?: Facet[];
}

export interface ProfileTagConfiguration {
  javascriptUrl?: string;
  configUrl?: string;
}

/** Representation of a Promotion */
export interface Promotion {
  /** Code of the promotion */
  code?: string;
  /** Promotion title */
  title?: string;
  /** Type of the promotion */
  promotionType?: string;
  /**
   * The initial date of the promotion
   * @format date-time
   */
  startDate?: string;
  /**
   * Last date of validity of the promotion
   * @format date-time
   */
  endDate?: string;
  /** Description of the promotion */
  description?: string;
  /** Message about promotion which is displayed when planning potential promotion. This field has higher priority over promotion description */
  couldFireMessages?: string[];
  /** Message fired while the promotion is active. This is info how much you will get when applying the promotion */
  firedMessages?: string[];
  /** Representation of an Image */
  productBanner?: Image;
  /** Boolean flag if promotion is enabled */
  enabled?: boolean;
  /**
   * Priority index as numeric value of the promotion. Higher number means higher priority
   * @format int32
   */
  priority?: number;
  /** Group of the promotion */
  promotionGroup?: string;
  /** List of promotion restrictions */
  restrictions?: PromotionRestriction[];
}

/** Representation of a Promotion list */
export interface PromotionList {
  /** List of promotions */
  promotions?: Promotion[];
}

/** Representation of a Promotion order entry consumed */
export interface PromotionOrderEntryConsumed {
  /** Order entry code */
  code?: string;
  /**
   * Adjusted unit price for promotion order entry
   * @format double
   */
  adjustedUnitPrice?: number;
  /**
   * Order entry number
   * @format int32
   */
  orderEntryNumber?: number;
  /**
   * Quantity of promotion order entry
   * @format int64
   */
  quantity?: number;
}

/** Representation of a Promotion Restriction */
export interface PromotionRestriction {
  /** Type of the promotion restriction */
  restrictionType?: string;
  /** Description of the promotion restriction */
  description?: string;
}

/** Representation of a Promotion result */
export interface PromotionResult {
  /** Description of promotion result */
  description?: string;
  /** Representation of a Promotion */
  promotion?: Promotion;
  /** List of promotion order entries consumed */
  consumedEntries?: PromotionOrderEntryConsumed[];
}

/** Representation of a Promotion result list */
export interface PromotionResultList {
  /** List of promotion results */
  promotions?: PromotionResult[];
}

export interface PropertyList {
  properties?: Property[];
}

export interface Property {
  key?: string;
  value?: string;
}

export interface PurchaseHistoryEntry {
  /** @format int64 */
  quantity?: number;
  /** Representation of a Product */
  product?: Product;
  /** @format date-time */
  lastOrderedOn?: string;
}

export interface PurchaseHistoryList {
  purchases?: PurchaseHistoryEntry[];
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
}

export interface PurchaseSummaryList {
  purchaseSummaryList?: PurchaseSummary[];
}

export interface PurchaseSummary {
  /** Representation of a Product */
  product?: Product;
  /** @format int32 */
  amount?: number;
}

export interface QualtricsConfiguration {
  site?: string;
  brandId?: string;
  projectId?: string;
  enabled?: boolean;
}

/** Representation of the quote object. */
export interface Quote {
  /**
   * Expiration time of the quote.
   * @format date-time
   */
  expirationTime: string;
  /**
   * Code of the quote.
   * @example "0003005"
   */
  code: string;
  /**
   * Name of the quote.
   * @example "Quote 0003005"
   */
  name: string;
  /**
   * Current state of the quote. Possible state values - DRAFT, SUBMITTED, OFFER, CANCELLED, EXPIRED, etc.. The list of the states can be extended.
   * @example "CANCELLED"
   */
  state: string;
  /**
   * Description of the quote.
   * @example "Quote description"
   */
  description?: string;
  /**
   * Current version of the quote.
   * @format int32
   * @example 1
   */
  version: number;
  /**
   * Minimum subtotal value for the quote in the currency of the store.
   * @format double
   * @example 25000
   */
  threshold: number;
  /**
   * Id of the cart, which is linked to the quote.
   * @example "000350"
   */
  cartId?: string;
  /**
   * Date of quote creation.
   * @format date-time
   */
  creationTime: string;
  /**
   * Date of the last quote update.
   * @format date-time
   */
  updatedTime: string;
  /** Actions, which are allowed to perform with the quote. */
  allowedActions?: string[];
  /** Representation of a Price */
  previousEstimatedTotal?: Price;
  /** List of quote comments. */
  comments?: Comment[];
  /** Representation of a Price */
  totalPriceWithTax?: Price;
  /** Representation of a Price */
  totalPrice?: Price;
  /** Entries of the cart. */
  entries?: OrderEntry[];
  /** List of entry groups */
  entryGroups?: EntryGroup[];
  /**
   * Total number of the items in the quote.
   * @format int32
   * @example 2
   */
  totalItems: number;
  /** Representation of a Price */
  quoteDiscounts?: Price;
  /**
   * Value of the discount
   * @format double
   */
  sapQuoteDiscountsRate?: number;
  /** Type of the discount - PERCENT for discount by percentage, ABSOLUTE for discount by amount, TARGET for discount by adjustment of the total value */
  sapQuoteDiscountsType?: string;
  /** Representation of a Price */
  orderDiscounts?: Price;
  /** Representation of a Price */
  subTotalWithDiscounts?: Price;
  /** Representation of a Price */
  productDiscounts?: Price;
  /** Representation of a Price */
  sapSubtotalExcludingOrderLevelDiscount?: Price;
  /** List of SAP attachments */
  sapAttachments?: SAPAttachment[];
}

/** The action with the quote. The quote action field is mandatory. */
export interface QuoteAction {
  /**
   * User's actions with the quote. Typical actions are: CANCEL, SUBMIT, ACCEPT, APPROVE, REJECT.
   * @example "SUBMIT"
   */
  action: string;
}

/** Discount applied to the quote - discountType for type of the discount, discountRate for value of the discount  */
export interface QuoteDiscount {
  /**
   * Type of the discount - PERCENT for discount by percentage, ABSOLUTE for discount by amount, TARGET for discount by adjustment of the total value
   * @example "PERCENT"
   */
  discountType?: string;
  /**
   * Value of the discount
   * @format double
   * @example 10
   */
  discountRate?: number;
}

/** Representation of a Quote result list. */
export interface QuoteList {
  /** List of quotes. */
  quotes?: Quote[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
}

/** Updated name, description or expiry date of the quote */
export interface QuoteMetadata {
  /**
   * Name of the quote.
   * @example "Quote Name"
   */
  name: string;
  /**
   * Description of the quote.
   * @example "Quote Description"
   */
  description?: string;
  /**
   * Expiration time of the quote.
   * @format date-time
   */
  expirationTime: string;
}

/** Object representing ways of creating new quote - by cartId for creating a new quote from the cart, by quoteCode for the requote action  */
export interface QuoteStarter {
  /**
   * CartId of the cart from which the quote will be created.
   * @example "0003050"
   */
  cartId?: string;
  /**
   * Code of the quote for the requote action.
   * @example "0003060"
   */
  quoteCode?: string;
}

export interface RecipeEntry {
  /** Representation of a Product */
  product?: Product;
  ingredientName?: string;
  /** @format double */
  amountToCart?: number;
  /** @format double */
  unitCapacity?: number;
  amountName?: string;
}

export interface Recipe {
  /** Code of the product */
  code?: string;
  /** Name of the product */
  name?: string;
  /** Url address of the product */
  url?: string;
  /** Description of the product */
  description?: string;
  /** Flag defining if product is purchasable */
  purchasable?: boolean;
  /** Representation of a Stock */
  stock?: Stock;
  /** List of future stocks */
  futureStocks?: FutureStock[];
  /** Flag defining if product is available for pickup */
  availableForPickup?: boolean;
  /**
   * Rating number of average value
   * @format double
   */
  averageRating?: number;
  /**
   * Number of reviews associated with the product
   * @format int32
   */
  numberOfReviews?: number;
  /** Product summary */
  summary?: string;
  /** Data of product manufacturer */
  manufacturer?: string;
  /** Variant type of the product */
  variantType?: string;
  /** Representation of a Price */
  price?: Price;
  /** Representation of a Unit */
  sapUnit?: SAPUnit;
  /** Information about base product */
  baseProduct?: string;
  /** List of images linked to product */
  images?: Image[];
  /** List of categories product belongs to */
  categories?: Category[];
  /** List of reviews associated with the product */
  reviews?: Review[];
  /** List of classifications related to the product */
  classifications?: Classification[];
  /** List of potential promotions related to the product */
  potentialPromotions?: Promotion[];
  /** List of variant options related to the product */
  variantOptions?: VariantOption[];
  /** List of base options related to the product */
  baseOptions?: BaseOption[];
  /** Flag stating if volume price should be displayed */
  volumePricesFlag?: boolean;
  /** List of volume prices */
  volumePrices?: Price[];
  /** List of product references */
  productReferences?: ProductReference[];
  /** List of variant matrixes associated with the product */
  variantMatrix?: VariantMatrixElement[];
  /** Representation of a Price Range */
  priceRange?: PriceRange;
  /** Flag stating if product is multidimensional */
  multidimensional?: boolean;
  /** Configurator type related to the product */
  configuratorType?: string;
  /** Flag stating if product is configurable */
  configurable?: boolean;
  /**
   * Tags associated with the product
   * @uniqueItems true
   */
  tags?: string[];
  /**
   * Flag specifies whether product can be added to cart. When addToCartDisabled=true, the product is not allowed to be added into cart and the reason is explained through sapAddToCartDisabledMessage; when addToCartDisabled=false, the product is allowed to be added into cart.
   * @example true
   */
  sapAddToCartDisabled?: boolean;
  /**
   * Message shows why product can not be added to cart.
   * @example "'EF-S 60mm f/2.8 USM Macro' is not available with 'EOS450D + 18-55 IS Kit'"
   */
  sapAddToCartDisabledMessage?: string;
  firstVariantCode?: string;
  firstVariantImage?: string;
  badges?: ProductBadge[];
  personalizationOption?: ProductPersonalizationOption;
  /** Representation of a Price */
  ppsPrice?: Price;
  modelName?: string;
  vin?: string;
  modelVariant?: string;
  exteriorColor?: string;
  interiorColor?: string;
  vehicleIndicators?: VehicleIndicators;
  /** Representation of an Image */
  sustainabilityImage?: Image;
  fomoStats?: FomoStats;
  contentUnit?: string;
  /** @format double */
  numberContentUnits?: number;
  recipeEntries?: RecipeEntry[];
  readyTime?: string;
  /** @format int32 */
  peopleNumber?: number;
  prepTime?: string;
  cookTime?: string;
}

/** Response body fields which will be returned while fetching the list of country's regions. */
export interface Region {
  /**
   * Country and Region code in iso format
   * @example "US-NY"
   */
  isocode?: string;
  /**
   * Region code in short iso form
   * @example "NY"
   */
  isocodeShort?: string;
  /**
   * Country code in iso format
   * @example "US"
   */
  countryIso?: string;
  /**
   * Name of the region
   * @example "New York"
   */
  name?: string;
}

/** List of Regions */
export interface RegionList {
  /** This is the list of Region fields that should be returned in the response body */
  regions?: Region[];
}

/** Representation of a request of replacing an existing user's login id. */
export interface ReplaceLoginIdInput {
  /**
   * New login id that is a unique string to identify a user.
   * @example "mark.rivers@pronto-hw.com"
   */
  newLoginId: string;
  /**
   * User password
   * @example "It'sMyPwd!0"
   */
  password: string;
}

/** Representation of a request of replacing an existing user's password */
export interface ReplacePasswordInput {
  /**
   * Current password of the customer.
   * @example "It'sMyPwd!0"
   */
  oldPassword: string;
  /**
   * New password of the customer.
   * @example "It'sMyPwd!1"
   */
  newPassword: string;
}

export interface ReplenishmentEdit {
  /** @format int32 */
  entryNumber?: number;
  productCode?: string;
}

/** Request body fields required and optional to operate on Replenishment Order data. */
export interface ReplenishmentOrder {
  /** Code number of order */
  code?: string;
  /** Flag stating iv value is net-value */
  net?: boolean;
  /** Representation of a Price */
  totalPriceWithTax?: Price;
  /** Representation of a Price */
  totalPrice?: Price;
  /** Representation of a Price */
  totalTax?: Price;
  /** Representation of a Price */
  subTotal?: Price;
  /** Representation of a Price */
  deliveryCost?: Price;
  /** List of order entries */
  entries?: OrderEntry[];
  /** List of entry groups */
  entryGroups?: EntryGroup[];
  /** @format int32 */
  totalItems?: number;
  /** Representation of a Delivery mode */
  deliveryMode?: DeliveryMode;
  /** Address object */
  deliveryAddress?: Address;
  /** Payment details object */
  paymentInfo?: PaymentDetails;
  /** List of applied order promotions */
  appliedOrderPromotions?: PromotionResult[];
  /** List of applied product promotions */
  appliedProductPromotions?: PromotionResult[];
  /** Representation of a Price */
  productDiscounts?: Price;
  /** Representation of a Price */
  orderDiscounts?: Price;
  /** Representation of a Price */
  totalDiscounts?: Price;
  /** Site */
  site?: string;
  /** Store */
  store?: string;
  /** Guest user id identifier */
  guid?: string;
  /** Flag showing if order is calculated */
  calculated?: boolean;
  /** List of applied vouchers */
  appliedVouchers?: Voucher[];
  /** Representation of a Principal webservice DTO used for defining User data types */
  user?: Principal;
  /** List of pickup order entry group */
  pickupOrderGroups?: PickupOrderEntryGroup[];
  /** List of delivery order entries group */
  deliveryOrderGroups?: DeliveryOrderEntryGroup[];
  /**
   * Quantity of pickup items
   * @format int64
   */
  pickupItemsQuantity?: number;
  /**
   * Quantity of delivery items
   * @format int64
   */
  deliveryItemsQuantity?: number;
  /** Customer requested date for order retrieval */
  requestedRetrievalAt?: string;
  /** Address object */
  sapBillingAddress?: Address;
  /**
   * Email of customer.
   * @example "xxx.yy@zz.com"
   */
  sapCustomerEmail?: string;
  giftCardPayments?: GiftCardPayment[];
  ppsLoyaltyCard?: PPSLoyaltyCard;
  promotionNameList?: string[];
  promotionRecommendationList?: string[];
  /** Representation of a Price */
  totalPriceWithoutDiscount?: Price;
  placedBy?: string;
  shipSeparately?: boolean;
  /** Representation of a Point of service */
  returnStore?: PointOfService;
  /**
   * Total unit count
   * @format int32
   */
  totalUnitCount?: number;
  /** List of potential order promotions for cart */
  potentialOrderPromotions?: PromotionResult[];
  /** List of potential product promotions for cart */
  potentialProductPromotions?: PromotionResult[];
  /** Name of the cart */
  name?: string;
  /** Description of the cart */
  description?: string;
  /**
   * Date of cart expiration time
   * @format date-time
   */
  expirationTime?: string;
  /**
   * Date of saving cart
   * @format date-time
   */
  saveTime?: string;
  /** Representation of a Principal webservice DTO used for defining User data types */
  savedBy?: Principal;
  /** Earliest possible retrieval date available for order */
  earliestRetrievalAt?: string;
  /** Messages about supplementary info, warning messages related to the cart */
  _messages?: ApiMessage[];
  /** Cost center object. */
  costCenter?: B2BCostCenter;
  paymentType?: B2BPaymentTypeData;
  purchaseOrderNumber?: string;
  /** Representation of the quote object. */
  sapQuote?: Quote;
  omsaInternalCost?: string;
  omsaPickAndPackCost?: string;
  /**
   * Is the Replenishment Order active
   * @example false
   */
  active?: boolean;
  /** Representation of a Trigger */
  trigger?: Trigger;
  /**
   * First date of the replenishment order
   * @format date-time
   */
  firstDate?: string;
  /**
   * Unique code for the replenishment order
   * @example "502BJ"
   */
  replenishmentOrderCode: string;
}

/** Representation of a Replenishment Order List */
export interface ReplenishmentOrderList {
  /** List of Replenishment Orders */
  replenishmentOrders?: ReplenishmentOrder[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
}

/** Request body parameter that contains details such as token and new password */
export interface ResetPassword {
  /** token value which will be generated as unique string that will be sent with email to allow user for completing reset-password operation */
  token: string;
  /** new password string which is required to complete process of resetting password */
  newPassword: string;
}

/** Representation of a return request for an order */
export interface ReturnRequest {
  /**
   * Boolean flag for whether the return request is cancellable
   * @example true
   */
  cancellable?: boolean;
  /**
   * Return request code
   * @example "00000001"
   */
  code?: string;
  /**
   * Date of the return request creation
   * @format date-time
   */
  creationTime?: string;
  /** Representation of a Price */
  deliveryCost?: Price;
  /** Representation of a order. Note that sapBillingAddress is mutually exclusive with paymentInfo.billingAddress, which is used when the billing address is created concurrently with the paymentInfo. sapBillingAddress is used when there is a need to save the billing address, but the related paymentInfo has not been created yet. */
  order?: Order;
  /**
   * Boolean flag for whether there is a delivery cost for refund
   * @example false
   */
  refundDeliveryCost?: boolean;
  /** Entries of the return request which contains information about the returned product */
  returnEntries?: ReturnRequestEntry[];
  /** URL of the return label */
  returnLabelDownloadUrl?: string;
  /**
   * Return merchandise authorization number
   * @example "00000001"
   */
  rma?: string;
  /** Status of return request */
  status?: string;
  /** Representation of a Price */
  subTotal?: Price;
  /** Representation of a Price */
  totalPrice?: Price;
  /** Representation of a Point of service */
  selectedStore?: PointOfService;
}

/** Representation of a return request entry which contains information about the returned product */
export interface ReturnRequestEntry {
  /**
   * Request body parameter that contains details such as the quantity of product (quantity), and the pickup store name (deliveryPointOfService.name)
   *
   * The DTO is in XML or .json format.
   */
  orderEntry?: OrderEntry;
  /**
   * Quantity which is expected to be returned for this return request entry
   * @format int64
   * @example 5
   */
  expectedQuantity?: number;
  /** Representation of a Price */
  refundAmount?: Price;
}

/** Representation of a return request entry input for an order */
export interface ReturnRequestEntryInput {
  /**
   * Order entry number of the returned product
   * @format int32
   * @example 1
   */
  orderEntryNumber: number;
  /**
   * Quantity of the product which belongs to the order entry and is requested to be returned
   * @format int64
   * @example 5
   */
  quantity: number;
}

/** Return request input list for the current order. */
export interface ReturnRequestEntryInputList {
  /**
   * Code of the order which return request is related to
   * @example "00000001"
   */
  orderCode: string;
  /** Return request entry inputs which contain information about the order entries which are requested to be returned */
  returnRequestEntryInputs: ReturnRequestEntryInput[];
}

/** Representation of an Order Return Request List */
export interface ReturnRequestList {
  /** List of order return requests */
  returnRequests?: ReturnRequest[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
}

/** Return request modification object. */
export interface ReturnRequestModification {
  /** Status of the return request */
  status?: "CANCELLING";
}

/** Object contains review details like : rating, alias, headline, comment. */
export interface Review {
  /** Identifier of review */
  id?: string;
  /** Review headline */
  headline?: string;
  /** Review comment */
  comment?: string;
  /**
   * Review rating value
   * @format double
   */
  rating?: number;
  /**
   * Date of the review
   * @format date-time
   */
  date?: string;
  /** Alias name for the review */
  alias?: string;
  /** User's object. */
  principal?: User;
}

/** Representation of a Review List */
export interface ReviewList {
  /** List of reviews */
  reviews?: Review[];
}

export interface RuleSet {
  selector?: Selector;
  declarations?: Declaration[];
}

export interface SAPAccessCode {
  /**
   * Representation of an SAP access code
   * @example "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ"
   */
  accessCode: string;
}

export interface SAPAccessCodePublicKey {
  /**
   * The public key to decrypt an SAP access code
   * @example "eyAiY2FydElkIjogIjAwMDAzMDAyIiwgImNyZWF0aW9"
   */
  publicKey: string;
}

/** Object contains attachment id for sap attachment. */
export interface SAPAttachment {
  /**
   * Attachment identifier.
   * @example "e58ed763-928c-4155-bee9-fdbaaadc15f3"
   */
  id?: string;
  /**
   * The name and the extension of the attached file.
   * @example "my_file.jpg"
   */
  filename?: string;
}

/** Representation of availability for a list of products. */
export interface SAPAvailability {
  /** List of product availability. */
  availabilityItems?: SAPProductAvailability[];
}

/** Customer coupon operation request. */
export interface SAPCustomerCouponOperationRequest {
  /**
   * Coupon code. A valid coupon code can be used to get a discount.
   * @example "VCHR-H8BC-Y3D5-34AL"
   */
  couponCode: string;
}

/** Attributes needed to update for guest user, such as email address  */
export interface SAPGuestUserRequest {
  /**
   * Email of the guest user. It will be used during the guest checkout process but may be optional when creating a guest user for a cart.
   * @example "xxx.yy@zz.com"
   */
  email?: string;
}

/** Representation of an Invoice */
export interface SAPInvoice {
  /**
   * Invoice Id
   * @example "9560887"
   */
  invoiceId?: string;
  /**
   * Invoice creation date
   * @format date-time
   * @example "2020-09-16T04:55:09.505Z"
   */
  createdAt?: string;
  /** Representation of a Price */
  totalAmount?: Price;
  /** Representation of a Price */
  netAmount?: Price;
  /**
   * External system identifier where the invoice resides.
   * @example "S4SALES"
   */
  externalSystemId?: string;
}

/** Representation of an Invoice List */
export interface SAPInvoiceList {
  /** list of invoice */
  invoices?: SAPInvoice[];
  /** sorting information */
  sorts?: Sort[];
  /** Pagination info */
  pagination?: Pagination;
}

/** Payment Method */
export interface SAPPaymentMethod {
  /**
   * Payment Method Code
   * @example "CreditCard"
   */
  code: string;
  /**
   * Payment Method Name
   * @example "Credit Card"
   */
  name: string;
}

/** Representation of availability for a product. */
export interface SAPProductAvailability {
  /**
   * Product identifier.
   * @example "3318057_A"
   */
  productCode?: string;
  /** List of unit availability. */
  unitAvailabilities?: SAPUnitAvailability[];
}

/** Representation of information of a saved cart */
export interface SAPSavedCartRequest {
  /**
   * Name of the saved cart.
   * @example "First cart"
   */
  name?: string;
  /**
   * Description of the saved cart.
   * @example "This is my first saved cart"
   */
  description?: string;
}

/** Representation of a Unit */
export interface SAPUnit {
  /** Code of the unit */
  code?: string;
  /** Name of the unit */
  name?: string;
  /** Code of the unit is used to check availability, which can be retrieved either from 'code' without any integration, from 'sapCode' with SAP OMSA integration, or potentially from another source through custom integration with a stock service. */
  availabilityCode?: string;
  /** Code of the SAP unit */
  sapCode?: string;
}

/** Representation of availability in a particular unit. */
export interface SAPUnitAvailability {
  /**
   * Available quantity.
   * @format int64
   * @example 25
   */
  quantity?: number;
  /**
   * Status of availability. Possible values can be IN_STOCK, OUT_OF_STOCK, LOW_STOCK.
   * @example "IN_STOCK"
   */
  status?: string;
  /**
   * Code of the unit of measure.
   * @example "PC"
   */
  unit?: string;
}

/** Voucher operation request. */
export interface SAPVoucherOperationRequest {
  /**
   * Voucher code. A valid voucher code can be used to get a discount.
   * @example "WINTER16"
   */
  voucherCode: string;
}

/** Representation of information of a voucher */
export interface SAPVoucherRequest {
  /**
   * Voucher identifier (code).
   * @example "VCHR-H8BC-Y3D5-34AL"
   */
  voucherId: string;
}

/** Representation of a Save Cart Result */
export interface SaveCartResult {
  /** Representation of a Cart. Note that sapBillingAddress is mutually exclusive with paymentInfo.billingAddress, which is used when the billing address is created concurrently with the paymentInfo. sapBillingAddress is used when there is a need to save the billing address, but the related paymentInfo has not been created yet. */
  savedCartData?: Cart;
}

/** Schedule replenishment form object. */
export interface ScheduleReplenishmentForm {
  /**
   * First day for replenishment order
   * @format date-time
   */
  replenishmentStartDate?: string;
  /**
   * How frequent replenishment should be activated expressed in days. Mandatory with 'recurrencePeriod=DAILY'.
   * @example "14"
   */
  numberOfDays?: string;
  /**
   * How frequent replenishment should be activated expressed in weeks. Mandatory with 'recurrencePeriod=WEEKLY'.
   * @example "1"
   */
  numberOfWeeks?: string;
  /**
   * On which date of month replenishment should be activated. Mandatory with 'recurrencePeriod=MONTHLY'.
   * @example "1"
   */
  nthDayOfMonth?: string;
  /**
   * Replenishment recurrence period. Available values are DAILY, WEEKLY and MONTHLY. DAILY requires 'numberOfDays'. WEEKLY requires 'daysOfWeek' AND 'numberOfWeeks'. MONTHLY requires 'nthDayOfMonth'.
   * @example "WEEKLY"
   */
  recurrencePeriod?: string;
  /** List of days of week on which replenishment should occur. Mandatory with 'recurrencePeriod=WEEKLY'. */
  daysOfWeek?: ("SUNDAY" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY")[];
}

/** Representation of a Search Query */
export interface SearchQuery {
  /** Value of search query */
  value?: string;
}

/** Representation of a Search State */
export interface SearchState {
  /** Url address of search state */
  url?: string;
  /** Representation of a Search Query */
  query?: SearchQuery;
}

export interface Selector {
  selector?: string;
  pseudoClass?: "ACTIVE" | "FOCUS" | "HOVER";
}

export interface SopPaymentDetails {
  amount?: string;
  billTo_city?: string;
  billTo_country?: string;
  billTo_customerID?: string;
  billTo_email?: string;
  billTo_firstName?: string;
  billTo_lastName?: string;
  billTo_phoneNumber?: string;
  billTo_postalCode?: string;
  billTo_state?: string;
  billTo_street1?: string;
  billTo_street2?: string;
  card_accountNumber?: string;
  card_cardType?: string;
  card_startMonth?: string;
  card_startYear?: string;
  card_issueNumber?: string;
  card_cvNumber?: string;
  card_expirationMonth?: string;
  card_expirationYear?: string;
  comments?: string;
  currency?: string;
  shipTo_city?: string;
  shipTo_country?: string;
  shipTo_firstName?: string;
  shipTo_lastName?: string;
  shipTo_phoneNumber?: string;
  shipTo_postalCode?: string;
  shipTo_shippingMethod?: string;
  shipTo_state?: string;
  shipTo_street1?: string;
  shipTo_street2?: string;
  taxAmount?: string;
  savePaymentInfo?: boolean;
  defaultPayment?: boolean;
}

/** Representation a Sort option */
export interface Sort {
  /** Code of Sort */
  code?: string;
  /** Name of Sort */
  name?: string;
  /** Flag stating when Sort is selected */
  selected?: boolean;
}

/** Representation of a special opening day */
export interface SpecialOpeningDay {
  /** Representation of a Time */
  openingTime?: Time;
  /** Representation of a Time */
  closingTime?: Time;
  /**
   * Date of special opening day
   * @format date-time
   */
  date?: string;
  /** Text representation of the date of special opening day */
  formattedDate?: string;
  /** Flag stating if special opening day is closed */
  closed?: boolean;
  /** Name of the special opening day event */
  name?: string;
  /** Comment field */
  comment?: string;
}

/** Representation of a Spell Checker Suggestion */
export interface SpellingSuggestion {
  /** Spelling suggestion */
  suggestion?: string;
  /** Query for spelling suggestion */
  query?: string;
}

export interface StartSessionRequest {
  validationUrl?: string;
}

/** Representation of a status summary, an aggregated view on issues for a specific status or severity. These issues are attached to configurations of products or order entries */
export interface StatusSummary {
  /**
   * Status or severity indicator, can be one of ERROR, WARNING, INFO or SUCCESS
   * @example "ERROR"
   */
  status?: string;
  /**
   * Number of issues per status
   * @format int32
   * @example 3
   */
  numberOfIssues?: number;
}

/** Representation of a Stock */
export interface Stock {
  /**
   * Status of stock level
   * @example "inStock"
   */
  stockLevelStatus?: string;
  /**
   * Stock level expressed as number
   * @format int64
   * @example 25
   */
  stockLevel?: number;
  /**
   * Indicate whether Stock level value is rounded
   * @example false
   */
  isValueRounded?: boolean;
}

/** Representation of a Store Count */
export interface StoreCount {
  /** Type of store count */
  type?: string;
  /** Name of store count */
  name?: string;
  /** Iso code of store */
  isoCode?: string;
  /**
   * Count
   * @format int32
   */
  count?: number;
  /** List of store counts */
  storeCountDataList?: StoreCount[];
}

/** Representation of a Store Count List */
export interface StoreCountList {
  /** List of store counts */
  countriesAndRegionsStoreCount?: StoreCount[];
}

/** Representation of a Store finder search page */
export interface StoreFinderSearchPage {
  /** List of stores */
  stores?: PointOfService[];
  /** List of sortings */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
  /** Location text */
  locationText?: string;
  /**
   * Source latitude
   * @format double
   */
  sourceLatitude?: number;
  /**
   * Source longitude
   * @format double
   */
  sourceLongitude?: number;
  /**
   * Bound north latitude
   * @format double
   */
  boundNorthLatitude?: number;
  /**
   * Bound east longitude
   * @format double
   */
  boundEastLongitude?: number;
  /**
   * Bound south latitude
   * @format double
   */
  boundSouthLatitude?: number;
  /**
   * Bound west longitude
   * @format double
   */
  boundWestLongitude?: number;
}

/** Representation of a Store Finder Stock Search Page */
export interface StoreFinderStockSearchPage {
  /** List of stores */
  stores?: PointOfServiceStock[];
  /** List of sorts */
  sorts?: Sort[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
  /** Location text */
  locationText?: string;
  /**
   * Source latitude
   * @format double
   */
  sourceLatitude?: number;
  /**
   * Source longitude
   * @format double
   */
  sourceLongitude?: number;
  /**
   * Bound to north latitude
   * @format double
   */
  boundNorthLatitude?: number;
  /**
   * Bound to east longitude
   * @format double
   */
  boundEastLongitude?: number;
  /**
   * Bound to south latitude
   * @format double
   */
  boundSouthLatitude?: number;
  /**
   * Bound to west longitude
   * @format double
   */
  boundWestLongitude?: number;
  /** Representation of a Product */
  product?: Product;
}

export interface StoryBookItem {
  /** Representation of a Product */
  product?: Product;
  /** Representation of a Category */
  category?: Category;
  article?: Article;
  source?: StoryBookSource;
  components?: Component[];
  quickBuy?: boolean;
  title?: string;
}

export interface StoryBookLayout {
  behavior?: string;
  type?: string;
  /** @format int32 */
  columnsNumber?: number;
  style?: string;
  staggerType?: string;
}

export interface StoryBookSource {
  sourcetType?: string;
  products?: Product[];
  /** @format int32 */
  itemsLimit?: number;
  merchandisingStrategy?: string;
}

export interface Stylesheet {
  css?: string;
  fragments?: any[];
}

/** Representation of a Suggestion */
export interface Suggestion {
  /** Suggestion value */
  value?: string;
}

/** Representation of a Suggestion List */
export interface SuggestionList {
  /** List of suggestions */
  suggestions?: Suggestion[];
}

/** Ticket object. */
export interface Ticket {
  /**
   * Ticket identifier.
   * @example "00000001"
   */
  id?: string;
  /**
   * Customer identifier.
   * @example "1000001"
   */
  customerId?: string;
  /**
   * Subject of ticket.
   * @example "My drill is broken."
   */
  subject?: string;
  /**
   * Date and time of ticket creation.
   * @format date-time
   */
  createdAt?: string;
  /**
   * Date and time of last modification.
   * @format date-time
   */
  modifiedAt?: string;
  availableStatusTransitions?: TicketStatus[];
  /** Object that can be associated with a ticket. The object can be a cart or an order. */
  associatedTo?: TicketAssociatedObject;
  /** Ticket status details. */
  status?: TicketStatus;
  ticketEvents?: TicketEvent[];
  /** Ticket category details. */
  ticketCategory?: TicketCategory;
}

/** Object that can be associated with a ticket. The object can be a cart or an order. */
export interface TicketAssociatedObject {
  /**
   * Associated object code.
   * @example "00001000"
   */
  code: string;
  /**
   * Type of associated object: Cart, SavedCart or Order.
   * @example "Cart"
   */
  type: string;
  /**
   * Date and time of last modification.
   * @format date-time
   */
  modifiedAt?: string;
}

/** List of ticket associated objects. */
export interface TicketAssociatedObjectList {
  ticketAssociatedObjects?: TicketAssociatedObject[];
}

/** Ticket category details. */
export interface TicketCategory {
  /**
   * Localized ticket category name.
   * @example "Enquiry"
   */
  name?: string;
  /**
   * Ticket category identifier.
   * @example "ENQUIRY"
   */
  id: string;
}

/** List of ticket categories. */
export interface TicketCategoryList {
  ticketCategories?: TicketCategory[];
}

/** Basic information about the ticket event. */
export interface TicketEvent {
  /**
   * Event code is specific to each event. It is used to identify an event.
   * @example "00000A15"
   */
  code?: string;
  /**
   * Name of user who created this ticket event.
   * @example "Mark Rivers"
   */
  author?: string;
  /**
   * Date and time of event creation.
   * @format date-time
   */
  createdAt?: string;
  /**
   * Detailed description of the question.
   * @example "The drill was damaged when I received it. Could you please send me a replacement?"
   */
  message: string;
  /**
   * Whether an agent added this event.
   * @example false
   */
  addedByAgent?: boolean;
  ticketEventAttachments?: TicketEventAttachment[];
  /** Ticket status details. */
  toStatus?: TicketStatus;
}

/** Object containing a set of fields for ticket attachment. */
export interface TicketEventAttachment {
  /**
   * Attachment identifier.
   * @example "001"
   */
  id?: string;
  /**
   * The name and the extension of the attached file.
   * @example "my_file.jpg"
   */
  filename?: string;
}

/** List of ticket results. */
export interface TicketList {
  /** List of tickets. */
  tickets?: Ticket[];
  /** Representation of a search results pagination */
  pagination?: DeprecatedPagination;
  /** Ticket list sorting details. */
  sorts?: Sort[];
}

/** Basic information of the ticket. */
export interface TicketStarter {
  /**
   * Subject of ticket.
   * @example "My drill is broken."
   */
  subject: string;
  /**
   * Detailed description of the question.
   * @example "The drill was damaged when I received it. Could you please send me a replacement?"
   */
  message: string;
  /** Ticket category details. */
  ticketCategory?: TicketCategory;
  /** Object that can be associated with a ticket. The object can be a cart or an order. */
  associatedTo?: TicketAssociatedObject;
}

/** Ticket status details. */
export interface TicketStatus {
  /**
   * Localized ticket status name.
   * @example "Closed"
   */
  name?: string;
  /**
   * Ticket status identifier.
   * @example "CLOSED"
   */
  id: string;
}

/** Representation of a Time */
export interface Time {
  /**
   * Hour part of the time data
   * @format byte
   */
  hour?: string;
  /**
   * Minute part of the time data
   * @format byte
   */
  minute?: string;
  /** Formatted hour */
  formattedHour?: string;
  /** Meridiem indicator */
  meridiemIndicator?: string;
}

/** Representation of a Title */
export interface Title {
  /** Title code */
  code?: string;
  /** Title name */
  name?: string;
}

/** Representation of a Title List */
export interface TitleList {
  /** List of titles */
  titles?: Title[];
}

/** Representation of a Trigger */
export interface Trigger {
  /**
   * The time the trigger will be activated
   * @format date-time
   */
  activationTime?: string;
  /**
   * Description of when the trigger is being activated
   * @example "Every Monday at 00:00:00"
   */
  displayTimeTable?: string;
}

/** User's object. */
export interface User {
  /** Unique user identifier */
  uid?: string;
  /** Name of the user */
  name?: string;
  /** Address object */
  defaultAddress?: Address;
  /** User title code */
  titleCode?: string;
  /** User title */
  title?: string;
  /** User first name */
  firstName?: string;
  /** User last name */
  lastName?: string;
  /** Representation of a Currency */
  currency?: Currency;
  /** Representation of a Language */
  language?: Language;
  /** User identifier */
  displayUid?: string;
  /** Customer identifier */
  customerId?: string;
  /**
   * Deactivation date
   * @format date-time
   */
  deactivationDate?: string;
  /**
   * Name of the default pick up location
   * @example "Misato"
   */
  defaultPointOfServiceName?: string;
  /**
   * The latest cart operated by customer
   * @example "000000001"
   */
  lastCartId?: string;
  /**
   * Indicates whether customer has order. Default value is false.
   * @example false
   */
  hasOrder?: boolean;
  /** Representation of a profile picture. */
  userAvatar?: UserAvatar;
  /** Organizational unit object. */
  orgUnit?: B2BUnit;
  roles?: string[];
  /** List of organizational approvers */
  approvers?: User[];
  /**
   * Boolean flag of whether the user is selected
   * @example true
   */
  selected?: boolean;
  /**
   * Boolean flag of whether the user is active/enabled or not
   * @example true
   */
  active?: boolean;
  /**
   * Email of the user
   * @example "mark.rivers@rustic-hw.com"
   */
  email?: string;
  preferences?: UserPreferences;
}

/** Representation of a profile picture. */
export interface UserAvatar {
  /**
   * URL of customer profile image in media server. It's optional.
   * @example "/medias/?context=bWFzdGVyfHJvb3R8NTMyMDB8aW1hZ2UvanBlZ3xhRGM1TDJneFl5ODROemszTlRNd016a3dOVFU0TG1wd1p3fDViODZlNmFiZTkyNzFjZDFmM2I5ZWU3OGJhZWEzMjViZDBiZTQ2NjM3YzIyMTg"
   */
  url?: string;
  /**
   * Image format. It's optional.
   * @example "jpg"
   */
  format?: string;
}

/** User group object with id and name. */
export interface UserGroup {
  /** Unique user identifier */
  uid?: string;
  /** Name of the user */
  name?: string;
  /** List of members */
  members?: Principal[];
  /**
   * Number of members
   * @format int32
   */
  membersCount?: number;
}

/** Representation of a User Group List */
export interface UserGroupList {
  /** List of user groups */
  userGroups?: UserGroup[];
  /**
   * Total number
   * @format int32
   */
  totalNumber?: number;
  /**
   * Page size
   * @format int32
   */
  pageSize?: number;
  /**
   * Number of pages
   * @format int32
   */
  numberOfPages?: number;
  /**
   * Current page
   * @format int32
   */
  currentPage?: number;
}

export interface UserPreferences {
  clothingSize?: string;
  shoeSize?: string;
  favouriteAccessories?: string[];
  favouriteColours?: string[];
  productsBlackList?: string[];
}

/** User's object. */
export interface UserSignUp {
  /**
   * user id, unique string required to create new user. It can be email
   * @example "akiro.nakamura@rustic-hw.com"
   */
  uid: string;
  /**
   * first name of the user
   * @example "Arika"
   */
  firstName: string;
  /**
   * last name of the user
   * @example "Nakamura"
   */
  lastName: string;
  /** @example "mr" */
  titleCode?: string;
  /** User password. */
  password: string;
  /**
   * Authentication identifier of a new B2C customer registration. Only needed when OTP for registration is enabled.
   * @example "<REG[nZbnrnhMWy2uBbzKWU/SQRVBZ7mJaiXX9/87PegvovM=]>"
   */
  verificationTokenId?: string;
  /**
   * Code included in the email sent to the customer to be registered. Only needed when OTP for registration is enabled.
   * @example "W2Lihg36"
   */
  verificationTokenCode?: string;
}

export interface Variable {
  name?: string;
}

/** Representation of a Variant Category */
export interface VariantCategory {
  /** Variant category name */
  name?: string;
  /** Flag if varian category has image assigned */
  hasImage?: boolean;
  /**
   * Priority number of variant category
   * @format int32
   */
  priority?: number;
}

/** Representation of a Variant Matrix Element */
export interface VariantMatrixElement {
  /** Representation of a Variant Value Category */
  variantValueCategory?: VariantValueCategory;
  /** Representation of a Variant Category */
  parentVariantCategory?: VariantCategory;
  /** Representation of a Variant Option */
  variantOption?: VariantOption;
  /** List of elements with the type of variant matrix element */
  elements?: VariantMatrixElement[];
  isLeaf?: boolean;
}

/** Representation of a Variant Option */
export interface VariantOption {
  /** Code of the variant option */
  code?: string;
  /** Representation of a Stock */
  stock?: Stock;
  /** Url address of the variant option */
  url?: string;
  /** Representation of a Price */
  priceData?: Price;
  /** List of variant option qualifiers */
  variantOptionQualifiers?: VariantOptionQualifier[];
}

/** Representation of a Variant Option Qualifier */
export interface VariantOptionQualifier {
  /** Qualifier */
  qualifier?: string;
  /** Name of variant option qualifier */
  name?: string;
  /** Value of variant option qualifier */
  value?: string;
  /** Representation of an Image */
  image?: Image;
  similar?: boolean;
  /** @format int32 */
  sequence?: number;
}

/** Representation of a Variant Value Category */
export interface VariantValueCategory {
  /** Name of the variant value category */
  name?: string;
  /**
   * Sequence number of variant value category
   * @format int32
   */
  sequence?: number;
  /** Parent category of variant value category */
  superCategories?: VariantCategory[];
}

export interface VehicleIndicators {
  /** @format double */
  odometerValue?: number;
  /** @format double */
  batteryStateOfHealth?: number;
}

/** Representation of information for obtained verification token. */
export interface VerificationToken {
  /**
   * Unique token ID generated for verification request, which is used for authentication along with the token code.
   * @example "<LGN[nZbnrnhMWy2uBbzKWU/SQRVBZ7mJaiXX9/87PegvovM=]>"
   */
  tokenId: string;
  /**
   * Verification token expiration time in seconds.
   * @format int32
   * @example 300
   */
  expiresIn: number;
}

/** Representation of a Voucher */
export interface Voucher {
  /** The identifier of the Voucher. This is the first part of voucher code which holds first 3 letters, like: 123 */
  code?: string;
  /** Voucher code, is the holder for keeping specific occasional voucher related to business usage. It can be generated and looks like: 123-H8BC-Y3D5-34AL */
  voucherCode?: string;
  /** Name of the voucher */
  name?: string;
  /** Description of the voucher */
  description?: string;
  /**
   * Value of the voucher. Example of such value is: 15.0d
   * @format double
   */
  value?: number;
  /** Formatted value of the voucher */
  valueFormatted?: string;
  /** The value of the voucher to display. Example: 15.0% */
  valueString?: string;
  /** Specifies if the order this voucher is applied to is shipped for free (true) or not (false). Defaults to false. */
  freeShipping?: boolean;
  /** Representation of a Currency */
  currency?: Currency;
  /** Representation of a Price */
  appliedValue?: Price;
}

/** Representation of a Voucher List */
export interface VoucherList {
  /** List of vouchers */
  vouchers?: Voucher[];
}

export interface WebPushConfig {
  applicationCode?: string;
  applicationServerPublicKey?: string;
  notificationTitle?: string;
  notificationIconURL?: string;
  sdkVersion?: string;
  webPushEvents?: WebPushEvent[];
}

export interface WebPushEvent {
  actionCode?: string;
  eventName?: string;
}

/** Representation of a Weekday Opening Day */
export interface WeekdayOpeningDay {
  /** Representation of a Time */
  openingTime?: Time;
  /** Representation of a Time */
  closingTime?: Time;
  /** Text representation of week day opening day */
  weekDay?: string;
  /** Flag stating if weekday opening day is closed */
  closed?: boolean;
}

export interface WeeklyMealPlannerDay {
  recipeCodes?: string[];
  dayCode?: string;
  /** @format int32 */
  dayIndex?: number;
}

export interface WeeklyMealPlanner {
  days?: WeeklyMealPlannerDay[];
}

/** Carrier */
export interface Carrier {
  /** Carrier code */
  code?: string;
  /** Carrier name */
  name?: string;
}

/** CDP Orders Extended Attributes */
export interface CdpOrderExtendedAttributes {
  /**
   * Tracking Number
   * @format int32
   * @example 1623423
   */
  trackingNumber?: number;
  /**
   * estimated delivery date
   * @format date-time
   */
  estimatedDeliveryDate?: string;
}

/** Consignment tracking data */
export interface ConsignmentTracking {
  /**
   * Consignment status
   * @example "inTransit"
   */
  statusDisplay?: string;
  /** Carrier */
  carrierDetails?: Carrier;
  /** Tracking identifier */
  trackingID?: string;
  /** The tracking url provided by the carrier */
  trackingUrl?: string;
  /**
   * Target arrival date
   * @format date-time
   */
  targetArrivalDate?: string;
  /** Logistics tracking information */
  trackingEvents?: ConsignmentTrackingEvent[];
}

/** Consignment tracking event */
export interface ConsignmentTrackingEvent {
  /**
   * Date of tracking event
   * @format date-time
   */
  eventDate?: string;
  /** Tracking detail */
  detail?: string;
  /** Consignment location */
  location?: string;
  /** Logistics status */
  referenceCode?: string;
}

/** Conversation */
export interface Conversation {
  /** conversation identifier */
  id?: string;
  /** conversation status */
  status?: string;
  /** Representation of a Principal webservice DTO used for defining User data types */
  agent?: Principal;
  /** Representation of a Principal webservice DTO used for defining User data types */
  customer?: Principal;
  /**
   * create date
   * @format date-time
   */
  createDate?: string;
  /**
   * close date
   * @format date-time
   */
  closeDate?: string;
  /** Conversation message */
  latestMessage?: ConversationMessage;
}

/** Conversation list */
export interface ConversationList {
  /** conversation data */
  conversations?: Conversation[];
}

/** Conversation message */
export interface ConversationMessage {
  /** message content */
  content?: string;
  /**
   * sent time
   * @format date-time
   */
  sentTime?: string;
  /** Representation of a Principal webservice DTO used for defining User data types */
  sender?: Principal;
}

/** the list of messages */
export interface ConversationMessageList {
  /** conversation identifier */
  conversationId?: string;
  /** the messages list of this conversation */
  messages?: ConversationMessage[];
}

export interface CouponRedemption {
  coupon?: CouponData;
  /** Representation of a order. Note that sapBillingAddress is mutually exclusive with paymentInfo.billingAddress, which is used when the billing address is created concurrently with the paymentInfo. sapBillingAddress is used when there is a need to save the billing address, but the related paymentInfo has not been created yet. */
  order?: Order;
  /** User's object. */
  user?: User;
  couponId?: string;
  couponCode?: string;
  orderCode?: string;
  customerId?: string;
  /** @format int32 */
  redemptionsPerCustomer?: number;
  /** @format int32 */
  "totalRedemptions "?: number;
  /** @format int32 */
  maxRedemptionsLimitPerCustomer?: number;
  /** @format int32 */
  "maxTotalRedemptionsLimit "?: number;
}

/** Customer interests search page */
export interface CustomerInterestsSearchPage {
  /** List of product interest relation */
  results?: ProductInterestRelation[];
  /** Sorting information */
  sorts?: Sort[];
  /** Pagination info */
  pagination?: Pagination;
}

/** Representation of a search results pagination */
export interface DeprecatedPagination {
  /**
   * The number of results per page. A page may have less results if there are less than a full page of results, only on the last page in the results
   * @format int32
   */
  pageSize?: number;
  /**
   * The current page number. The first page is number zero (0), the second page is number one (1), and so on
   * @format int32
   */
  currentPage?: number;
  /** The selected sort code */
  sort?: string;
  /**
   * The total number of pages. This is the number of pages, each of pageSize, required to display the totalResults.
   * @format int32
   */
  totalPages?: number;
  /**
   * The total number of matched results across all pages
   * @format int64
   */
  totalResults?: number;
}

/** Error message */
export interface Error {
  /** Type of the error e.g. 'LowStockError'. */
  type?: string;
  /** Additional classification specific for each error type e.g. 'noStock'. */
  reason?: string;
  /** Descriptive, human readable error message. */
  message?: string;
  /** Type of the object related to the error e.g. 'entry'. */
  subjectType?: string;
  /** Identifier of the related object e.g. '1'. */
  subject?: string;
  /** Error code */
  errorCode?: string;
  /** @example "English" */
  language?: string;
  /**
   * @format int32
   * @example 1
   */
  position?: number;
  exceptionMessage?: string;
}

/** List of errors */
export interface ErrorList {
  errors?: Error[];
}

/** Notification preference */
export interface NotificationPreference {
  /**
   * preference channel
   * @example "email, sms, site_message"
   */
  channel?: string;
  /** the corresponding value of current channel, for example, for SMS it should be a mobile number; for email it should be an email address */
  value?: string;
  /** if true, the channel is on; if false, the channel is off */
  enabled?: boolean;
  /** if true, the channel is visible; if false, the channel is invisible */
  visible?: boolean;
}

/** Notification preference list */
export interface NotificationPreferenceList {
  /** notification preferences */
  preferences?: NotificationPreference[];
}

/** Pagination info */
export interface Pagination {
  /**
   * Number of elements on this page
   * @format int32
   */
  count?: number;
  /**
   * Total number of elements
   * @format int64
   */
  totalCount?: number;
  /**
   * Current page number
   * @format int32
   */
  page?: number;
  /**
   * Total number of pages
   * @format int32
   */
  totalPages?: number;
  /** Indicates if there is next page */
  hasNext?: boolean;
  /** Indicates if there is previous page */
  hasPrevious?: boolean;
}

/** Product interest entry */
export interface ProductInterestEntry {
  /** Product interest type */
  interestType?: string;
  /**
   * Added date of product interest
   * @format date-time
   */
  dateAdded?: string;
  /**
   * Expiration date of product interest
   * @format date-time
   */
  expirationDate?: string;
}

/** Product interest relation */
export interface ProductInterestRelation {
  /** Representation of a Product */
  product?: Product;
  /** List of product interest entry */
  productInterestEntry?: ProductInterestEntry[];
}

/** Site message */
export interface SiteMessage {
  /** message uid */
  uid?: string;
  /** message subject */
  subject?: string;
  /** message body */
  body?: string;
  /** notification type used for this message */
  notificationType?: "BACK_IN_STOCK" | "COUPON_EFFECTIVE" | "NOTIFICATION" | "COUPON_EXPIRE";
  /**
   * sent date
   * @format date-time
   */
  sentDate?: string;
}

/** Site message search result */
export interface SiteMessageSearchResult {
  /** site messages */
  messages?: SiteMessage[];
  /** sorting information */
  sorts?: Sort[];
  /** Pagination info */
  pagination?: Pagination;
}

/** Sort option */
export interface Sort {
  code?: string;
  asc?: boolean;
}
