// @generated by protoc-gen-es v1.10.0 with parameter "target=ts"
// @generated from file warehousingShared.proto (package api, syntax proto3)
/* eslint-disable */
// @ts-nocheck

import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf";
import { Message, proto3 } from "@bufbuild/protobuf";
import { ClaimSummary, DateTime, MetadataElement, QuantityLength, QuantityVolume, QuantityWeight } from "./shared_pb.js";
import { ItemPayload } from "./item_pb.js";

/**
 * @generated from enum api.HandlingunitStatusCode
 */
export enum HandlingunitStatusCode {
  /**
   * @generated from enum value: HANDLINGUNIT_0000_UNKNOWN = 0;
   */
  HANDLINGUNIT_0000_UNKNOWN = 0,

  /**
   * @generated from enum value: HANDLINGUNIT_0500_PACKING = 500;
   */
  HANDLINGUNIT_0500_PACKING = 500,

  /**
   * @generated from enum value: HANDLINGUNIT_1000_READY_TO_COLLECT = 1000;
   */
  HANDLINGUNIT_1000_READY_TO_COLLECT = 1000,

  /**
   * @generated from enum value: HANDLINGUNIT_1500_LOADED = 1500;
   */
  HANDLINGUNIT_1500_LOADED = 1500,

  /**
   * @generated from enum value: HANDLINGUNIT_2000_COLLECTING = 2000;
   */
  HANDLINGUNIT_2000_COLLECTING = 2000,

  /**
   * @generated from enum value: HANDLINGUNIT_2500_COLLECTION_ERROR = 2500;
   */
  HANDLINGUNIT_2500_COLLECTION_ERROR = 2500,

  /**
   * @generated from enum value: HANDLINGUNIT_2800_DISPATCHED = 2800;
   */
  HANDLINGUNIT_2800_DISPATCHED = 2800,

  /**
   * @generated from enum value: HANDLINGUNIT_3000_COLLECTED = 3000;
   */
  HANDLINGUNIT_3000_COLLECTED = 3000,

  /**
   * @generated from enum value: HANDLINGUNIT_3500_HANDLED_BY_CARRIER = 3500;
   */
  HANDLINGUNIT_3500_HANDLED_BY_CARRIER = 3500,

  /**
   * @generated from enum value: HANDLINGUNIT_4000_DELIVERY_ERROR = 4000;
   */
  HANDLINGUNIT_4000_DELIVERY_ERROR = 4000,

  /**
   * @generated from enum value: HANDLINGUNIT_4500_INTERRUPTED = 4500;
   */
  HANDLINGUNIT_4500_INTERRUPTED = 4500,

  /**
   * @generated from enum value: HANDLINGUNIT_5000_DELIVERING = 5000;
   */
  HANDLINGUNIT_5000_DELIVERING = 5000,

  /**
   * @generated from enum value: HANDLINGUNIT_5500_DELIVERY_COMPLETED = 5500;
   */
  HANDLINGUNIT_5500_DELIVERY_COMPLETED = 5500,

  /**
   * @generated from enum value: HANDLINGUNIT_6000_UNPACKING = 6000;
   */
  HANDLINGUNIT_6000_UNPACKING = 6000,

  /**
   * @generated from enum value: HANDLINGUNIT_6500_FREED = 6500;
   */
  HANDLINGUNIT_6500_FREED = 6500,

  /**
   * @generated from enum value: HANDLINGUNIT_7000_CANCELED = 7000;
   */
  HANDLINGUNIT_7000_CANCELED = 7000,
}
// Retrieve enum metadata with: proto3.getEnumType(HandlingunitStatusCode)
proto3.util.setEnumType(HandlingunitStatusCode, "api.HandlingunitStatusCode", [
  { no: 0, name: "HANDLINGUNIT_0000_UNKNOWN" },
  { no: 500, name: "HANDLINGUNIT_0500_PACKING" },
  { no: 1000, name: "HANDLINGUNIT_1000_READY_TO_COLLECT" },
  { no: 1500, name: "HANDLINGUNIT_1500_LOADED" },
  { no: 2000, name: "HANDLINGUNIT_2000_COLLECTING" },
  { no: 2500, name: "HANDLINGUNIT_2500_COLLECTION_ERROR" },
  { no: 2800, name: "HANDLINGUNIT_2800_DISPATCHED" },
  { no: 3000, name: "HANDLINGUNIT_3000_COLLECTED" },
  { no: 3500, name: "HANDLINGUNIT_3500_HANDLED_BY_CARRIER" },
  { no: 4000, name: "HANDLINGUNIT_4000_DELIVERY_ERROR" },
  { no: 4500, name: "HANDLINGUNIT_4500_INTERRUPTED" },
  { no: 5000, name: "HANDLINGUNIT_5000_DELIVERING" },
  { no: 5500, name: "HANDLINGUNIT_5500_DELIVERY_COMPLETED" },
  { no: 6000, name: "HANDLINGUNIT_6000_UNPACKING" },
  { no: 6500, name: "HANDLINGUNIT_6500_FREED" },
  { no: 7000, name: "HANDLINGUNIT_7000_CANCELED" },
]);

/**
 * type of code for Handlingunit ID
 *
 * @generated from enum api.IDType
 */
export enum IDType {
  /**
   * @generated from enum value: HUID_UNKNOWN = 0;
   */
  HUID_UNKNOWN = 0,

  /**
   * @generated from enum value: HUID_SSCC = 1;
   */
  HUID_SSCC = 1,
}
// Retrieve enum metadata with: proto3.getEnumType(IDType)
proto3.util.setEnumType(IDType, "api.IDType", [
  { no: 0, name: "HUID_UNKNOWN" },
  { no: 1, name: "HUID_SSCC" },
]);

/**
 *
 *  All statuses for Stock entity
 *
 * @generated from enum api.StockStatusCode
 */
export enum StockStatusCode {
  /**
   * @generated from enum value: STOCK_UNKNOWN = 0;
   */
  STOCK_UNKNOWN = 0,

  /**
   * @generated from enum value: STOCK_1000_ACTIVE = 1000;
   */
  STOCK_1000_ACTIVE = 1000,
}
// Retrieve enum metadata with: proto3.getEnumType(StockStatusCode)
proto3.util.setEnumType(StockStatusCode, "api.StockStatusCode", [
  { no: 0, name: "STOCK_UNKNOWN" },
  { no: 1000, name: "STOCK_1000_ACTIVE" },
]);

/**
 *
 *  All statuses for Stock entity
 *
 * @generated from enum api.MovementStatusCode
 */
export enum MovementStatusCode {
  /**
   * @generated from enum value: MOVEMENT_UNKNOWN = 0;
   */
  MOVEMENT_UNKNOWN = 0,

  /**
   * @generated from enum value: MOVEMENT_1000_ACTIVE = 1000;
   */
  MOVEMENT_1000_ACTIVE = 1000,
}
// Retrieve enum metadata with: proto3.getEnumType(MovementStatusCode)
proto3.util.setEnumType(MovementStatusCode, "api.MovementStatusCode", [
  { no: 0, name: "MOVEMENT_UNKNOWN" },
  { no: 1000, name: "MOVEMENT_1000_ACTIVE" },
]);

/**
 * @generated from enum api.GoodsTrackingStatusCode
 */
export enum GoodsTrackingStatusCode {
  /**
   * @generated from enum value: GOODS_0000_UNKNOWN = 0;
   */
  GOODS_0000_UNKNOWN = 0,

  /**
   * @generated from enum value: GOODS_1500_READY_TO_PREPARE = 1500;
   */
  GOODS_1500_READY_TO_PREPARE = 1500,

  /**
   * @generated from enum value: GOODS_2000_PREPARATION_ERROR = 2000;
   */
  GOODS_2000_PREPARATION_ERROR = 2000,

  /**
   * @generated from enum value: GOODS_2500_PREPARING = 2500;
   */
  GOODS_2500_PREPARING = 2500,

  /**
   * @generated from enum value: GOODS_3000_PREPARATION_COMPLETED = 3000;
   */
  GOODS_3000_PREPARATION_COMPLETED = 3000,

  /**
   * @generated from enum value: GOODS_3500_READY_TO_TRANSPORT = 3500;
   */
  GOODS_3500_READY_TO_TRANSPORT = 3500,

  /**
   * @generated from enum value: GOODS_4000_TRANSPORT_ERROR = 4000;
   */
  GOODS_4000_TRANSPORT_ERROR = 4000,

  /**
   * @generated from enum value: GOODS_4500_TRANSPORTING = 4500;
   */
  GOODS_4500_TRANSPORTING = 4500,

  /**
   * @generated from enum value: GOODS_5000_TRANSPORT_COMPLETED = 5000;
   */
  GOODS_5000_TRANSPORT_COMPLETED = 5000,

  /**
   * @generated from enum value: GOODS_5500_READY_TO_RECEIVE = 5500;
   */
  GOODS_5500_READY_TO_RECEIVE = 5500,

  /**
   * @generated from enum value: GOODS_6000_RECEPTION_ERROR = 6000;
   */
  GOODS_6000_RECEPTION_ERROR = 6000,

  /**
   * @generated from enum value: GOODS_6500_RECEIVING = 6500;
   */
  GOODS_6500_RECEIVING = 6500,

  /**
   * @generated from enum value: GOODS_7000_RECEPTION_COMPLETED = 7000;
   */
  GOODS_7000_RECEPTION_COMPLETED = 7000,

  /**
   * @generated from enum value: GOODS_7500_COMPLETED = 7500;
   */
  GOODS_7500_COMPLETED = 7500,
}
// Retrieve enum metadata with: proto3.getEnumType(GoodsTrackingStatusCode)
proto3.util.setEnumType(GoodsTrackingStatusCode, "api.GoodsTrackingStatusCode", [
  { no: 0, name: "GOODS_0000_UNKNOWN" },
  { no: 1500, name: "GOODS_1500_READY_TO_PREPARE" },
  { no: 2000, name: "GOODS_2000_PREPARATION_ERROR" },
  { no: 2500, name: "GOODS_2500_PREPARING" },
  { no: 3000, name: "GOODS_3000_PREPARATION_COMPLETED" },
  { no: 3500, name: "GOODS_3500_READY_TO_TRANSPORT" },
  { no: 4000, name: "GOODS_4000_TRANSPORT_ERROR" },
  { no: 4500, name: "GOODS_4500_TRANSPORTING" },
  { no: 5000, name: "GOODS_5000_TRANSPORT_COMPLETED" },
  { no: 5500, name: "GOODS_5500_READY_TO_RECEIVE" },
  { no: 6000, name: "GOODS_6000_RECEPTION_ERROR" },
  { no: 6500, name: "GOODS_6500_RECEIVING" },
  { no: 7000, name: "GOODS_7000_RECEPTION_COMPLETED" },
  { no: 7500, name: "GOODS_7500_COMPLETED" },
]);

/**
 *
 * Codes used in StockMovementReason to explain stock movement.
 *
 * @generated from enum api.StockMovementTypeCode
 */
export enum StockMovementTypeCode {
  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_UNKNOWN = 0;
   */
  STOCK_MOVEMENT_TYPE_UNKNOWN = 0,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_OUTBOUND = 1;
   */
  STOCK_MOVEMENT_TYPE_OUTBOUND = 1,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_INBOUND = 2;
   */
  STOCK_MOVEMENT_TYPE_INBOUND = 2,

  /**
   * STOCK_MOVEMENT_TYPE_INTERNAL = 3;
   *
   * @generated from enum value: STOCK_MOVEMENT_TYPE_PRODUCTION = 4;
   */
  STOCK_MOVEMENT_TYPE_PRODUCTION = 4,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_DESTRUCTION = 5;
   */
  STOCK_MOVEMENT_TYPE_DESTRUCTION = 5,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_FIX = 6;
   */
  STOCK_MOVEMENT_TYPE_FIX = 6,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_REQUALIFICATION = 7;
   */
  STOCK_MOVEMENT_TYPE_REQUALIFICATION = 7,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_SNAPSHOT_DELTA = 8;
   */
  STOCK_MOVEMENT_TYPE_SNAPSHOT_DELTA = 8,

  /**
   * @generated from enum value: STOCK_MOVEMENT_TYPE_USE_OF_GOODS = 9;
   */
  STOCK_MOVEMENT_TYPE_USE_OF_GOODS = 9,
}
// Retrieve enum metadata with: proto3.getEnumType(StockMovementTypeCode)
proto3.util.setEnumType(StockMovementTypeCode, "api.StockMovementTypeCode", [
  { no: 0, name: "STOCK_MOVEMENT_TYPE_UNKNOWN" },
  { no: 1, name: "STOCK_MOVEMENT_TYPE_OUTBOUND" },
  { no: 2, name: "STOCK_MOVEMENT_TYPE_INBOUND" },
  { no: 4, name: "STOCK_MOVEMENT_TYPE_PRODUCTION" },
  { no: 5, name: "STOCK_MOVEMENT_TYPE_DESTRUCTION" },
  { no: 6, name: "STOCK_MOVEMENT_TYPE_FIX" },
  { no: 7, name: "STOCK_MOVEMENT_TYPE_REQUALIFICATION" },
  { no: 8, name: "STOCK_MOVEMENT_TYPE_SNAPSHOT_DELTA" },
  { no: 9, name: "STOCK_MOVEMENT_TYPE_USE_OF_GOODS" },
]);

/**
 * @generated from message api.HandlingunitStatus
 */
export class HandlingunitStatus extends Message<HandlingunitStatus> {
  /**
   * @generated from field: api.HandlingunitStatusCode StatusCode = 1;
   */
  StatusCode = HandlingunitStatusCode.HANDLINGUNIT_0000_UNKNOWN;

  /**
   * This date is only a string as it is always given by system
   *
   * @generated from field: string Date = 2;
   */
  Date = "";

  /**
   * Status effective date. Set by the event's RefDate that triggered the status change.
   *
   * @generated from field: api.DateTime ActualDate = 3;
   */
  ActualDate?: DateTime;

  constructor(data?: PartialMessage<HandlingunitStatus>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.HandlingunitStatus";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "StatusCode", kind: "enum", T: proto3.getEnumType(HandlingunitStatusCode) },
    { no: 2, name: "Date", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "ActualDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HandlingunitStatus {
    return new HandlingunitStatus().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HandlingunitStatus {
    return new HandlingunitStatus().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HandlingunitStatus {
    return new HandlingunitStatus().fromJsonString(jsonString, options);
  }

  static equals(a: HandlingunitStatus | PlainMessage<HandlingunitStatus> | undefined, b: HandlingunitStatus | PlainMessage<HandlingunitStatus> | undefined): boolean {
    return proto3.util.equals(HandlingunitStatus, a, b);
  }
}

/**
 * @generated from message api.HandlingunitStatusStruct
 */
export class HandlingunitStatusStruct extends Message<HandlingunitStatusStruct> {
  /**
   * Current status of the Handlingunit entity
   *
   * @generated from field: api.HandlingunitStatus Current = 1;
   */
  Current?: HandlingunitStatus;

  /**
   * List of all status history of the Handlingunit entity
   *
   * @generated from field: repeated api.HandlingunitStatus History = 2;
   */
  History: HandlingunitStatus[] = [];

  /**
   * @generated from field: string CreationDate = 3;
   */
  CreationDate = "";

  /**
   * @generated from field: uint32 Version = 4;
   */
  Version = 0;

  constructor(data?: PartialMessage<HandlingunitStatusStruct>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.HandlingunitStatusStruct";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Current", kind: "message", T: HandlingunitStatus },
    { no: 2, name: "History", kind: "message", T: HandlingunitStatus, repeated: true },
    { no: 3, name: "CreationDate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Version", kind: "scalar", T: 13 /* ScalarType.UINT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HandlingunitStatusStruct {
    return new HandlingunitStatusStruct().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HandlingunitStatusStruct {
    return new HandlingunitStatusStruct().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HandlingunitStatusStruct {
    return new HandlingunitStatusStruct().fromJsonString(jsonString, options);
  }

  static equals(a: HandlingunitStatusStruct | PlainMessage<HandlingunitStatusStruct> | undefined, b: HandlingunitStatusStruct | PlainMessage<HandlingunitStatusStruct> | undefined): boolean {
    return proto3.util.equals(HandlingunitStatusStruct, a, b);
  }
}

/**
 *
 * All the information of the Handlingunit that is sent to the parent ExecutionFlow.
 * Here we have the Handlingunit status and also the content in terms of Goods structured by ExecutionFlow LineID
 *
 * @generated from message api.HandlingunitSummary
 */
export class HandlingunitSummary extends Message<HandlingunitSummary> {
  /**
   * @generated from field: string HandlingunitID = 1;
   */
  HandlingunitID = "";

  /**
   * @generated from field: api.HandlingunitStatus Status = 2;
   */
  Status?: HandlingunitStatus;

  /**
   * @generated from field: string TrackingID = 3;
   */
  TrackingID = "";

  /**
   * Metadata are characteristics specific to the project. They can be of several data form (string, integer, float, boolean or timestamp)
   *
   * @generated from field: repeated api.MetadataElement MetaData = 6;
   */
  MetaData: MetadataElement[] = [];

  /**
   * @generated from field: repeated api.QuantifiedGoodsByLine Contents = 7;
   */
  Contents: QuantifiedGoodsByLine[] = [];

  /**
   * @generated from field: string TrackingURL = 9;
   */
  TrackingURL = "";

  /**
   * @generated from field: bool IsReported = 10;
   */
  IsReported = false;

  constructor(data?: PartialMessage<HandlingunitSummary>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.HandlingunitSummary";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "HandlingunitID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Status", kind: "message", T: HandlingunitStatus },
    { no: 3, name: "TrackingID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "MetaData", kind: "message", T: MetadataElement, repeated: true },
    { no: 7, name: "Contents", kind: "message", T: QuantifiedGoodsByLine, repeated: true },
    { no: 9, name: "TrackingURL", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 10, name: "IsReported", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HandlingunitSummary {
    return new HandlingunitSummary().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HandlingunitSummary {
    return new HandlingunitSummary().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HandlingunitSummary {
    return new HandlingunitSummary().fromJsonString(jsonString, options);
  }

  static equals(a: HandlingunitSummary | PlainMessage<HandlingunitSummary> | undefined, b: HandlingunitSummary | PlainMessage<HandlingunitSummary> | undefined): boolean {
    return proto3.util.equals(HandlingunitSummary, a, b);
  }
}

/**
 * @generated from message api.HandlingunitInformation
 */
export class HandlingunitInformation extends Message<HandlingunitInformation> {
  /**
   * Describe the container Type : Container, Box, Pallet ...
   *
   * @generated from field: string ContainerType = 1;
   */
  ContainerType = "";

  /**
   * @generated from field: api.QuantityWeight Weight = 2;
   */
  Weight?: QuantityWeight;

  /**
   * @generated from field: api.QuantityVolume Volume = 3;
   */
  Volume?: QuantityVolume;

  /**
   * @generated from field: api.QuantityLength Height = 4;
   */
  Height?: QuantityLength;

  /**
   * @generated from field: api.QuantityLength Width = 5;
   */
  Width?: QuantityLength;

  /**
   * @generated from field: api.QuantityLength Length = 6;
   */
  Length?: QuantityLength;

  constructor(data?: PartialMessage<HandlingunitInformation>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.HandlingunitInformation";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ContainerType", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Weight", kind: "message", T: QuantityWeight },
    { no: 3, name: "Volume", kind: "message", T: QuantityVolume },
    { no: 4, name: "Height", kind: "message", T: QuantityLength },
    { no: 5, name: "Width", kind: "message", T: QuantityLength },
    { no: 6, name: "Length", kind: "message", T: QuantityLength },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HandlingunitInformation {
    return new HandlingunitInformation().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HandlingunitInformation {
    return new HandlingunitInformation().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HandlingunitInformation {
    return new HandlingunitInformation().fromJsonString(jsonString, options);
  }

  static equals(a: HandlingunitInformation | PlainMessage<HandlingunitInformation> | undefined, b: HandlingunitInformation | PlainMessage<HandlingunitInformation> | undefined): boolean {
    return proto3.util.equals(HandlingunitInformation, a, b);
  }
}

/**
 *
 * 	Stock entity status structure
 *
 * @generated from message api.StockStatus
 */
export class StockStatus extends Message<StockStatus> {
  /**
   * @generated from field: api.StockStatusCode StatusCode = 1;
   */
  StatusCode = StockStatusCode.STOCK_UNKNOWN;

  /**
   * This date is only a string as it is always given by system
   *
   * @generated from field: string Date = 2;
   */
  Date = "";

  /**
   * Status effective date. Set by the event's RefDate that triggered the status change.
   *
   * @generated from field: api.DateTime ActualDate = 3;
   */
  ActualDate?: DateTime;

  constructor(data?: PartialMessage<StockStatus>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StockStatus";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "StatusCode", kind: "enum", T: proto3.getEnumType(StockStatusCode) },
    { no: 2, name: "Date", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "ActualDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StockStatus {
    return new StockStatus().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StockStatus {
    return new StockStatus().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StockStatus {
    return new StockStatus().fromJsonString(jsonString, options);
  }

  static equals(a: StockStatus | PlainMessage<StockStatus> | undefined, b: StockStatus | PlainMessage<StockStatus> | undefined): boolean {
    return proto3.util.equals(StockStatus, a, b);
  }
}

/**
 *
 * 	StockStatusStruct statuses structure
 *
 * @generated from message api.StockStatusStruct
 */
export class StockStatusStruct extends Message<StockStatusStruct> {
  /**
   * Current status of the Stock entity
   *
   * @generated from field: api.StockStatus Current = 1;
   */
  Current?: StockStatus;

  /**
   * List of all status history of the Stock entity
   *
   * @generated from field: repeated api.StockStatus History = 2;
   */
  History: StockStatus[] = [];

  /**
   * @generated from field: uint32 Version = 3;
   */
  Version = 0;

  /**
   * @generated from field: string CreationDate = 4;
   */
  CreationDate = "";

  constructor(data?: PartialMessage<StockStatusStruct>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StockStatusStruct";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Current", kind: "message", T: StockStatus },
    { no: 2, name: "History", kind: "message", T: StockStatus, repeated: true },
    { no: 3, name: "Version", kind: "scalar", T: 13 /* ScalarType.UINT32 */ },
    { no: 4, name: "CreationDate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StockStatusStruct {
    return new StockStatusStruct().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StockStatusStruct {
    return new StockStatusStruct().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StockStatusStruct {
    return new StockStatusStruct().fromJsonString(jsonString, options);
  }

  static equals(a: StockStatusStruct | PlainMessage<StockStatusStruct> | undefined, b: StockStatusStruct | PlainMessage<StockStatusStruct> | undefined): boolean {
    return proto3.util.equals(StockStatusStruct, a, b);
  }
}

/**
 *
 * 	Stock entity status structure
 * TODO : kpiItem à vérifier
 *
 * @generated from message api.MovementStatus
 */
export class MovementStatus extends Message<MovementStatus> {
  /**
   * @generated from field: api.MovementStatusCode StatusCode = 1;
   */
  StatusCode = MovementStatusCode.MOVEMENT_UNKNOWN;

  /**
   * This date is only a string as it is always given by system
   *
   * @generated from field: string Date = 2;
   */
  Date = "";

  /**
   * Status effective date. Set by the event's RefDate that triggered the status change.
   *
   * @generated from field: api.DateTime ActualDate = 3;
   */
  ActualDate?: DateTime;

  constructor(data?: PartialMessage<MovementStatus>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MovementStatus";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "StatusCode", kind: "enum", T: proto3.getEnumType(MovementStatusCode) },
    { no: 2, name: "Date", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "ActualDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MovementStatus {
    return new MovementStatus().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MovementStatus {
    return new MovementStatus().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MovementStatus {
    return new MovementStatus().fromJsonString(jsonString, options);
  }

  static equals(a: MovementStatus | PlainMessage<MovementStatus> | undefined, b: MovementStatus | PlainMessage<MovementStatus> | undefined): boolean {
    return proto3.util.equals(MovementStatus, a, b);
  }
}

/**
 *
 * 	MovementStatusStruct statuses structure
 *
 * @generated from message api.MovementStatusStruct
 */
export class MovementStatusStruct extends Message<MovementStatusStruct> {
  /**
   * Current status of the Movement entity
   *
   * @generated from field: api.MovementStatus Current = 1;
   */
  Current?: MovementStatus;

  /**
   * List of all status history of the Movement entity
   *
   * @generated from field: repeated api.MovementStatus History = 2;
   */
  History: MovementStatus[] = [];

  /**
   * @generated from field: uint32 Version = 3;
   */
  Version = 0;

  /**
   * for movement Version is always set to 1
   *
   * @generated from field: string CreationDate = 4;
   */
  CreationDate = "";

  constructor(data?: PartialMessage<MovementStatusStruct>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MovementStatusStruct";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Current", kind: "message", T: MovementStatus },
    { no: 2, name: "History", kind: "message", T: MovementStatus, repeated: true },
    { no: 3, name: "Version", kind: "scalar", T: 13 /* ScalarType.UINT32 */ },
    { no: 4, name: "CreationDate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MovementStatusStruct {
    return new MovementStatusStruct().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MovementStatusStruct {
    return new MovementStatusStruct().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MovementStatusStruct {
    return new MovementStatusStruct().fromJsonString(jsonString, options);
  }

  static equals(a: MovementStatusStruct | PlainMessage<MovementStatusStruct> | undefined, b: MovementStatusStruct | PlainMessage<MovementStatusStruct> | undefined): boolean {
    return proto3.util.equals(MovementStatusStruct, a, b);
  }
}

/**
 * @generated from message api.GoodsTrackingStatus
 */
export class GoodsTrackingStatus extends Message<GoodsTrackingStatus> {
  /**
   * @generated from field: api.GoodsTrackingStatusCode StatusCode = 1;
   */
  StatusCode = GoodsTrackingStatusCode.GOODS_0000_UNKNOWN;

  /**
   * This date is only a string as it is always given by system
   *
   * @generated from field: string Date = 2;
   */
  Date = "";

  /**
   * Status effective date. Set by the event's RefDate that triggered the status change.
   *
   * @generated from field: api.DateTime ActualDate = 3;
   */
  ActualDate?: DateTime;

  constructor(data?: PartialMessage<GoodsTrackingStatus>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.GoodsTrackingStatus";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "StatusCode", kind: "enum", T: proto3.getEnumType(GoodsTrackingStatusCode) },
    { no: 2, name: "Date", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "ActualDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GoodsTrackingStatus {
    return new GoodsTrackingStatus().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GoodsTrackingStatus {
    return new GoodsTrackingStatus().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GoodsTrackingStatus {
    return new GoodsTrackingStatus().fromJsonString(jsonString, options);
  }

  static equals(a: GoodsTrackingStatus | PlainMessage<GoodsTrackingStatus> | undefined, b: GoodsTrackingStatus | PlainMessage<GoodsTrackingStatus> | undefined): boolean {
    return proto3.util.equals(GoodsTrackingStatus, a, b);
  }
}

/**
 * @generated from message api.Goods
 */
export class Goods extends Message<Goods> {
  /**
   * The following fields are the composed key for Goods
   *
   * @generated from field: string ItemID = 1;
   */
  ItemID = "";

  /**
   * Logitical Variant branch ID
   *
   * @generated from field: string LVBranchID = 2;
   */
  LVBranchID = "";

  /**
   * PriorityDate becomes mandatory (may be fictitious)
   *
   * @generated from field: string PriorityDate = 3;
   */
  PriorityDate = "";

  /**
   * The segmentation keys are used to complete the segmentation criteria of the project stock. They also apply to order lines and stock movements
   *
   * @generated from field: repeated api.MetadataElement SegmentationKeys = 4;
   */
  SegmentationKeys: MetadataElement[] = [];

  constructor(data?: PartialMessage<Goods>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.Goods";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ItemID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "LVBranchID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "PriorityDate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "SegmentationKeys", kind: "message", T: MetadataElement, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Goods {
    return new Goods().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Goods {
    return new Goods().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Goods {
    return new Goods().fromJsonString(jsonString, options);
  }

  static equals(a: Goods | PlainMessage<Goods> | undefined, b: Goods | PlainMessage<Goods> | undefined): boolean {
    return proto3.util.equals(Goods, a, b);
  }
}

/**
 * @generated from message api.EnrichedGoods
 */
export class EnrichedGoods extends Message<EnrichedGoods> {
  /**
   * @generated from field: string ItemID = 1;
   */
  ItemID = "";

  /**
   * Logistical variant branch ID
   *
   * @generated from field: string LVBranchID = 2;
   */
  LVBranchID = "";

  /**
   * Date of minimum substainability in <a href='https://en.wikipedia.org/wiki/ISO_8601'>ISO 8601</a> format
   *
   * @generated from field: string PriorityDate = 3;
   */
  PriorityDate = "";

  /**
   * The segmentation keys are used to complete the segmentation criteria of the project stock. They also apply to order lines and stock movements
   *
   * @generated from field: repeated api.MetadataElement SegmentationKeys = 4;
   */
  SegmentationKeys: MetadataElement[] = [];

  /**
   * Enriched from Item entity with ItemID + LVID, or directly provided by value
   *
   * @generated from field: api.ItemPayload Item = 6;
   */
  Item?: ItemPayload;

  constructor(data?: PartialMessage<EnrichedGoods>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.EnrichedGoods";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ItemID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "LVBranchID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "PriorityDate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "SegmentationKeys", kind: "message", T: MetadataElement, repeated: true },
    { no: 6, name: "Item", kind: "message", T: ItemPayload },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): EnrichedGoods {
    return new EnrichedGoods().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): EnrichedGoods {
    return new EnrichedGoods().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): EnrichedGoods {
    return new EnrichedGoods().fromJsonString(jsonString, options);
  }

  static equals(a: EnrichedGoods | PlainMessage<EnrichedGoods> | undefined, b: EnrichedGoods | PlainMessage<EnrichedGoods> | undefined): boolean {
    return proto3.util.equals(EnrichedGoods, a, b);
  }
}

/**
 * @generated from message api.RequestedEnrichedGoods
 */
export class RequestedEnrichedGoods extends Message<RequestedEnrichedGoods> {
  /**
   * @generated from field: string ItemID = 1;
   */
  ItemID = "";

  /**
   * Logistical variant branch ID
   *
   * @generated from field: string LVBranchID = 2;
   */
  LVBranchID = "";

  /**
   * Date of minimum substainability in <a href='https://fr.wikipedia.org/wiki/ISO_8601'>ISO 8601</a> format
   *
   * @generated from field: string PriorityDate = 3;
   */
  PriorityDate = "";

  /**
   * The segmentation keys are used to complete the segmentation criteria of the project stock. They also apply to order lines and stock movements
   *
   * @generated from field: repeated api.MetadataElement SegmentationKeys = 4;
   */
  SegmentationKeys: MetadataElement[] = [];

  /**
   * Enriched from Item entity with ItemID + LVID, or directly provided by value
   *
   * @generated from field: api.ItemPayload Item = 6;
   */
  Item?: ItemPayload;

  constructor(data?: PartialMessage<RequestedEnrichedGoods>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestedEnrichedGoods";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ItemID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "LVBranchID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "PriorityDate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "SegmentationKeys", kind: "message", T: MetadataElement, repeated: true },
    { no: 6, name: "Item", kind: "message", T: ItemPayload },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestedEnrichedGoods {
    return new RequestedEnrichedGoods().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestedEnrichedGoods {
    return new RequestedEnrichedGoods().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestedEnrichedGoods {
    return new RequestedEnrichedGoods().fromJsonString(jsonString, options);
  }

  static equals(a: RequestedEnrichedGoods | PlainMessage<RequestedEnrichedGoods> | undefined, b: RequestedEnrichedGoods | PlainMessage<RequestedEnrichedGoods> | undefined): boolean {
    return proto3.util.equals(RequestedEnrichedGoods, a, b);
  }
}

/**
 *
 * 	Structure to quantify a requested enriched goods.
 * 	Used in Order and, Executionflow entities on requested content structures.
 *
 * @generated from message api.QuantifiedRequestedGoods
 */
export class QuantifiedRequestedGoods extends Message<QuantifiedRequestedGoods> {
  /**
   * @generated from field: api.RequestedEnrichedGoods Goods = 1;
   */
  Goods?: RequestedEnrichedGoods;

  /**
   * @generated from field: api.QuantityInLV Quantity = 2;
   */
  Quantity?: QuantityInLV;

  constructor(data?: PartialMessage<QuantifiedRequestedGoods>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantifiedRequestedGoods";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Goods", kind: "message", T: RequestedEnrichedGoods },
    { no: 2, name: "Quantity", kind: "message", T: QuantityInLV },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantifiedRequestedGoods {
    return new QuantifiedRequestedGoods().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantifiedRequestedGoods {
    return new QuantifiedRequestedGoods().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantifiedRequestedGoods {
    return new QuantifiedRequestedGoods().fromJsonString(jsonString, options);
  }

  static equals(a: QuantifiedRequestedGoods | PlainMessage<QuantifiedRequestedGoods> | undefined, b: QuantifiedRequestedGoods | PlainMessage<QuantifiedRequestedGoods> | undefined): boolean {
    return proto3.util.equals(QuantifiedRequestedGoods, a, b);
  }
}

/**
 *
 * Structure to quantity a goods into a tracked HU.
 * Used into Executionflow  ShippedContents structure.
 * Only filled by internal computation (not API-exposed)
 *
 * @generated from message api.QuantifiedGoodsByHU
 */
export class QuantifiedGoodsByHU extends Message<QuantifiedGoodsByHU> {
  /**
   * @generated from field: api.EnrichedGoods Goods = 1;
   */
  Goods?: EnrichedGoods;

  /**
   * @generated from field: string HandlingunitID = 2;
   */
  HandlingunitID = "";

  /**
   * @generated from field: string TrackingID = 3;
   */
  TrackingID = "";

  /**
   * @generated from field: api.GoodsTrackingStatus Status = 4;
   */
  Status?: GoodsTrackingStatus;

  /**
   * @generated from field: api.QuantityInLV RequestedQuantity = 5;
   */
  RequestedQuantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV RequestedQuantityInBaseLV = 6;
   */
  RequestedQuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV PreparedQuantity = 7;
   */
  PreparedQuantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV PreparedQuantityInBaseLV = 8;
   */
  PreparedQuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV ReceivedQuantity = 9;
   */
  ReceivedQuantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV ReceivedQuantityInBaseLV = 10;
   */
  ReceivedQuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: string TrackingURL = 11;
   */
  TrackingURL = "";

  constructor(data?: PartialMessage<QuantifiedGoodsByHU>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantifiedGoodsByHU";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Goods", kind: "message", T: EnrichedGoods },
    { no: 2, name: "HandlingunitID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TrackingID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Status", kind: "message", T: GoodsTrackingStatus },
    { no: 5, name: "RequestedQuantity", kind: "message", T: QuantityInLV },
    { no: 6, name: "RequestedQuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 7, name: "PreparedQuantity", kind: "message", T: QuantityInLV },
    { no: 8, name: "PreparedQuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 9, name: "ReceivedQuantity", kind: "message", T: QuantityInLV },
    { no: 10, name: "ReceivedQuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 11, name: "TrackingURL", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantifiedGoodsByHU {
    return new QuantifiedGoodsByHU().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantifiedGoodsByHU {
    return new QuantifiedGoodsByHU().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantifiedGoodsByHU {
    return new QuantifiedGoodsByHU().fromJsonString(jsonString, options);
  }

  static equals(a: QuantifiedGoodsByHU | PlainMessage<QuantifiedGoodsByHU> | undefined, b: QuantifiedGoodsByHU | PlainMessage<QuantifiedGoodsByHU> | undefined): boolean {
    return proto3.util.equals(QuantifiedGoodsByHU, a, b);
  }
}

/**
 * @generated from message api.QuantifiedGoodsByLine
 */
export class QuantifiedGoodsByLine extends Message<QuantifiedGoodsByLine> {
  /**
   * @generated from field: api.EnrichedGoods Goods = 1;
   */
  Goods?: EnrichedGoods;

  /**
   * @generated from field: string LineID = 2;
   */
  LineID = "";

  /**
   * @generated from field: api.QuantityInLV PreparedQuantity = 3;
   */
  PreparedQuantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV PreparedQuantityInBaseLV = 4;
   */
  PreparedQuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV ReceivedQuantity = 5;
   */
  ReceivedQuantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV ReceivedQuantityInBaseLV = 6;
   */
  ReceivedQuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: bool IsReported = 7;
   */
  IsReported = false;

  constructor(data?: PartialMessage<QuantifiedGoodsByLine>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantifiedGoodsByLine";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Goods", kind: "message", T: EnrichedGoods },
    { no: 2, name: "LineID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "PreparedQuantity", kind: "message", T: QuantityInLV },
    { no: 4, name: "PreparedQuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 5, name: "ReceivedQuantity", kind: "message", T: QuantityInLV },
    { no: 6, name: "ReceivedQuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 7, name: "IsReported", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantifiedGoodsByLine {
    return new QuantifiedGoodsByLine().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantifiedGoodsByLine {
    return new QuantifiedGoodsByLine().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantifiedGoodsByLine {
    return new QuantifiedGoodsByLine().fromJsonString(jsonString, options);
  }

  static equals(a: QuantifiedGoodsByLine | PlainMessage<QuantifiedGoodsByLine> | undefined, b: QuantifiedGoodsByLine | PlainMessage<QuantifiedGoodsByLine> | undefined): boolean {
    return proto3.util.equals(QuantifiedGoodsByLine, a, b);
  }
}

/**
 * @generated from message api.QuantifiedDatedGoodsByExeflow
 */
export class QuantifiedDatedGoodsByExeflow extends Message<QuantifiedDatedGoodsByExeflow> {
  /**
   * This date must be the one for the stock movement
   *
   * @generated from field: api.DateTime DateTime = 8;
   */
  DateTime?: DateTime;

  /**
   * @generated from field: api.EnrichedGoods Goods = 1;
   */
  Goods?: EnrichedGoods;

  /**
   * @generated from field: string ExecutionflowID = 2;
   */
  ExecutionflowID = "";

  /**
   * @generated from field: string LineID = 3;
   */
  LineID = "";

  /**
   * @generated from field: string OrderID = 10;
   */
  OrderID = "";

  /**
   * @generated from field: string ActorID = 4;
   */
  ActorID = "";

  /**
   * @generated from field: api.QuantityInLV Quantity = 5;
   */
  Quantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV QuantityInBaseLV = 9;
   */
  QuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: bool StockMovementGenerated = 6;
   */
  StockMovementGenerated = false;

  /**
   * @generated from field: bool ContentSummaryGenerated = 7;
   */
  ContentSummaryGenerated = false;

  constructor(data?: PartialMessage<QuantifiedDatedGoodsByExeflow>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantifiedDatedGoodsByExeflow";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 8, name: "DateTime", kind: "message", T: DateTime },
    { no: 1, name: "Goods", kind: "message", T: EnrichedGoods },
    { no: 2, name: "ExecutionflowID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "LineID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 10, name: "OrderID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "ActorID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "Quantity", kind: "message", T: QuantityInLV },
    { no: 9, name: "QuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 6, name: "StockMovementGenerated", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
    { no: 7, name: "ContentSummaryGenerated", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantifiedDatedGoodsByExeflow {
    return new QuantifiedDatedGoodsByExeflow().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantifiedDatedGoodsByExeflow {
    return new QuantifiedDatedGoodsByExeflow().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantifiedDatedGoodsByExeflow {
    return new QuantifiedDatedGoodsByExeflow().fromJsonString(jsonString, options);
  }

  static equals(a: QuantifiedDatedGoodsByExeflow | PlainMessage<QuantifiedDatedGoodsByExeflow> | undefined, b: QuantifiedDatedGoodsByExeflow | PlainMessage<QuantifiedDatedGoodsByExeflow> | undefined): boolean {
    return proto3.util.equals(QuantifiedDatedGoodsByExeflow, a, b);
  }
}

/**
 *
 * 	Structure to describe a quantity of goods prepared by executionflow line ID.
 * 	Here the item is described by its ID and will not be enriched.
 * 	Used in Handlingunit entities, where we do not need to enrich Item payload with a hard (fully described goods) link.
 *   Used fo prepared Goods when no date is requested
 *
 * @generated from message api.QuantifiedGoodsByExeflow
 */
export class QuantifiedGoodsByExeflow extends Message<QuantifiedGoodsByExeflow> {
  /**
   * @generated from field: api.EnrichedGoods Goods = 1;
   */
  Goods?: EnrichedGoods;

  /**
   * @generated from field: string ExecutionflowID = 2;
   */
  ExecutionflowID = "";

  /**
   * @generated from field: string LineID = 3;
   */
  LineID = "";

  /**
   * @generated from field: string ActorID = 4;
   */
  ActorID = "";

  /**
   * @generated from field: api.QuantityInLV Quantity = 5;
   */
  Quantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV QuantityInBaseLV = 8;
   */
  QuantityInBaseLV?: QuantityInLV;

  /**
   * @generated from field: bool StockMovementGenerated = 6;
   */
  StockMovementGenerated = false;

  /**
   * @generated from field: bool ContentSummaryGenerated = 7;
   */
  ContentSummaryGenerated = false;

  /**
   * @generated from field: string OrderID = 9;
   */
  OrderID = "";

  constructor(data?: PartialMessage<QuantifiedGoodsByExeflow>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantifiedGoodsByExeflow";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Goods", kind: "message", T: EnrichedGoods },
    { no: 2, name: "ExecutionflowID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "LineID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "ActorID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "Quantity", kind: "message", T: QuantityInLV },
    { no: 8, name: "QuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 6, name: "StockMovementGenerated", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
    { no: 7, name: "ContentSummaryGenerated", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
    { no: 9, name: "OrderID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantifiedGoodsByExeflow {
    return new QuantifiedGoodsByExeflow().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantifiedGoodsByExeflow {
    return new QuantifiedGoodsByExeflow().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantifiedGoodsByExeflow {
    return new QuantifiedGoodsByExeflow().fromJsonString(jsonString, options);
  }

  static equals(a: QuantifiedGoodsByExeflow | PlainMessage<QuantifiedGoodsByExeflow> | undefined, b: QuantifiedGoodsByExeflow | PlainMessage<QuantifiedGoodsByExeflow> | undefined): boolean {
    return proto3.util.equals(QuantifiedGoodsByExeflow, a, b);
  }
}

/**
 *
 * 	Structure to define a quantity in a specific LV with a priority
 *
 * @generated from message api.QuantityByLV
 */
export class QuantityByLV extends Message<QuantityByLV> {
  /**
   * Logistical variant ID
   *
   * @generated from field: string LVID = 1;
   */
  LVID = "";

  /**
   * @generated from field: string LVName = 2;
   */
  LVName = "";

  /**
   * @generated from field: float Quantity = 3;
   */
  Quantity = 0;

  /**
   * In order to sort the map from the biggest LV to the smallest
   *
   * @generated from field: string Priority = 4;
   */
  Priority = "";

  constructor(data?: PartialMessage<QuantityByLV>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityByLV";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "LVID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "LVName", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Quantity", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 4, name: "Priority", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityByLV {
    return new QuantityByLV().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityByLV {
    return new QuantityByLV().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityByLV {
    return new QuantityByLV().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityByLV | PlainMessage<QuantityByLV> | undefined, b: QuantityByLV | PlainMessage<QuantityByLV> | undefined): boolean {
    return proto3.util.equals(QuantityByLV, a, b);
  }
}

/**
 *
 * 	Structure to define a quantity in a specific LV
 *
 * @generated from message api.QuantityInLV
 */
export class QuantityInLV extends Message<QuantityInLV> {
  /**
   * Logistical variant ID
   *
   * @generated from field: string LVID = 1;
   */
  LVID = "";

  /**
   * @generated from field: string LVName = 2;
   */
  LVName = "";

  /**
   * @generated from field: float Value = 3;
   */
  Value = 0;

  constructor(data?: PartialMessage<QuantityInLV>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityInLV";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "LVID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "LVName", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityInLV {
    return new QuantityInLV().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityInLV {
    return new QuantityInLV().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityInLV {
    return new QuantityInLV().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityInLV | PlainMessage<QuantityInLV> | undefined, b: QuantityInLV | PlainMessage<QuantityInLV> | undefined): boolean {
    return proto3.util.equals(QuantityInLV, a, b);
  }
}

/**
 *
 * Definition of a stock snapshot
 *
 * @generated from message api.StockSnapshot
 */
export class StockSnapshot extends Message<StockSnapshot> {
  /**
   * Datetime for the image on this key
   *
   * @generated from field: api.DateTime DateTime = 6;
   */
  DateTime?: DateTime;

  /**
   * @generated from field: string ID = 2;
   */
  ID = "";

  /**
   * @generated from field: api.QuantityInLV Quantity = 4;
   */
  Quantity?: QuantityInLV;

  /**
   * @generated from field: api.QuantityInLV QuantityInBaseLV = 5;
   */
  QuantityInBaseLV?: QuantityInLV;

  /**
   * If true means there is only one snapshotted value for a key. Otherwise, sum will be done afterward
   *
   * @generated from field: bool IsTotalQuantity = 7;
   */
  IsTotalQuantity = false;

  /**
   * @generated from field: repeated float PartialQuantities = 8;
   */
  PartialQuantities: number[] = [];

  /**
   * this qty is used to build the snapshot_delta qty
   *
   * @generated from field: api.QuantityInLV PreviousQuantityInBaseLV = 9;
   */
  PreviousQuantityInBaseLV?: QuantityInLV;

  constructor(data?: PartialMessage<StockSnapshot>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StockSnapshot";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 6, name: "DateTime", kind: "message", T: DateTime },
    { no: 2, name: "ID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Quantity", kind: "message", T: QuantityInLV },
    { no: 5, name: "QuantityInBaseLV", kind: "message", T: QuantityInLV },
    { no: 7, name: "IsTotalQuantity", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
    { no: 8, name: "PartialQuantities", kind: "scalar", T: 2 /* ScalarType.FLOAT */, repeated: true },
    { no: 9, name: "PreviousQuantityInBaseLV", kind: "message", T: QuantityInLV },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StockSnapshot {
    return new StockSnapshot().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StockSnapshot {
    return new StockSnapshot().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StockSnapshot {
    return new StockSnapshot().fromJsonString(jsonString, options);
  }

  static equals(a: StockSnapshot | PlainMessage<StockSnapshot> | undefined, b: StockSnapshot | PlainMessage<StockSnapshot> | undefined): boolean {
    return proto3.util.equals(StockSnapshot, a, b);
  }
}

/**
 *
 * Definition of a stock movement claim
 *
 * @generated from message api.StockMovementClaim
 */
export class StockMovementClaim extends Message<StockMovementClaim> {
  /**
   * @generated from field: repeated api.ClaimSummary Claims = 1;
   */
  Claims: ClaimSummary[] = [];

  /**
   * @generated from field: string ID = 2;
   */
  ID = "";

  constructor(data?: PartialMessage<StockMovementClaim>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StockMovementClaim";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Claims", kind: "message", T: ClaimSummary, repeated: true },
    { no: 2, name: "ID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StockMovementClaim {
    return new StockMovementClaim().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StockMovementClaim {
    return new StockMovementClaim().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StockMovementClaim {
    return new StockMovementClaim().fromJsonString(jsonString, options);
  }

  static equals(a: StockMovementClaim | PlainMessage<StockMovementClaim> | undefined, b: StockMovementClaim | PlainMessage<StockMovementClaim> | undefined): boolean {
    return proto3.util.equals(StockMovementClaim, a, b);
  }
}

/**
 *
 * Definition of a stock movement
 *
 * @generated from message api.StockMovement
 */
export class StockMovement extends Message<StockMovement> {
  /**
   * @generated from field: api.DateTime DateTime = 1;
   */
  DateTime?: DateTime;

  /**
   * @generated from field: string ID = 2;
   */
  ID = "";

  /**
   * Codes used in StockMovementReason to explain stock movement
   *
   * @generated from field: api.StockMovementTypeCode Type = 3;
   */
  Type = StockMovementTypeCode.STOCK_MOVEMENT_TYPE_UNKNOWN;

  /**
   * @generated from field: string HandlingunitID = 4;
   */
  HandlingunitID = "";

  /**
   * @generated from field: string OrderID = 17;
   */
  OrderID = "";

  /**
   * @generated from field: string ExecutionflowID = 5;
   */
  ExecutionflowID = "";

  /**
   * @generated from field: string ExecutionflowLineID = 6;
   */
  ExecutionflowLineID = "";

  /**
   * @generated from field: string Reason = 7;
   */
  Reason = "";

  /**
   * @generated from field: string OperationReference = 8;
   */
  OperationReference = "";

  /**
   * @generated from field: api.MovementQuantityInLV Quantity = 9;
   */
  Quantity?: MovementQuantityInLV;

  /**
   * @generated from field: api.MovementQuantityInLV QuantityInBaseLV = 10;
   */
  QuantityInBaseLV?: MovementQuantityInLV;

  /**
   * @generated from field: bool MvtAlreadyUsedInStock = 11;
   */
  MvtAlreadyUsedInStock = false;

  /**
   * @generated from field: repeated api.QuantityByLV QuantityByLVs = 12;
   */
  QuantityByLVs: QuantityByLV[] = [];

  /**
   * @generated from field: string LVDetailledQuantity = 13;
   */
  LVDetailledQuantity = "";

  /**
   * @generated from field: string Author = 14;
   */
  Author = "";

  /**
   * @generated from field: string ExternalMoveRef = 15;
   */
  ExternalMoveRef = "";

  /**
   * @generated from field: string ExternalInfo = 16;
   */
  ExternalInfo = "";

  constructor(data?: PartialMessage<StockMovement>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StockMovement";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "DateTime", kind: "message", T: DateTime },
    { no: 2, name: "ID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Type", kind: "enum", T: proto3.getEnumType(StockMovementTypeCode) },
    { no: 4, name: "HandlingunitID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 17, name: "OrderID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "ExecutionflowID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "ExecutionflowLineID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 7, name: "Reason", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 8, name: "OperationReference", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 9, name: "Quantity", kind: "message", T: MovementQuantityInLV },
    { no: 10, name: "QuantityInBaseLV", kind: "message", T: MovementQuantityInLV },
    { no: 11, name: "MvtAlreadyUsedInStock", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
    { no: 12, name: "QuantityByLVs", kind: "message", T: QuantityByLV, repeated: true },
    { no: 13, name: "LVDetailledQuantity", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 14, name: "Author", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 15, name: "ExternalMoveRef", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 16, name: "ExternalInfo", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StockMovement {
    return new StockMovement().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StockMovement {
    return new StockMovement().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StockMovement {
    return new StockMovement().fromJsonString(jsonString, options);
  }

  static equals(a: StockMovement | PlainMessage<StockMovement> | undefined, b: StockMovement | PlainMessage<StockMovement> | undefined): boolean {
    return proto3.util.equals(StockMovement, a, b);
  }
}

/**
 *
 * 	Structure to define a quantity in a specific LV
 *
 * @generated from message api.MovementQuantityInLV
 */
export class MovementQuantityInLV extends Message<MovementQuantityInLV> {
  /**
   * Logistical variant ID
   *
   * @generated from field: string LVID = 1;
   */
  LVID = "";

  /**
   * @generated from field: string LVName = 2;
   */
  LVName = "";

  /**
   * @generated from field: float Value = 3;
   */
  Value = 0;

  constructor(data?: PartialMessage<MovementQuantityInLV>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MovementQuantityInLV";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "LVID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "LVName", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MovementQuantityInLV {
    return new MovementQuantityInLV().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MovementQuantityInLV {
    return new MovementQuantityInLV().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MovementQuantityInLV {
    return new MovementQuantityInLV().fromJsonString(jsonString, options);
  }

  static equals(a: MovementQuantityInLV | PlainMessage<MovementQuantityInLV> | undefined, b: MovementQuantityInLV | PlainMessage<MovementQuantityInLV> | undefined): boolean {
    return proto3.util.equals(MovementQuantityInLV, a, b);
  }
}

