# This file was auto-generated by Fern from our API Definition.

import typing_extensions
import typing_extensions
from ..types.inventory_change_type import InventoryChangeType
from .inventory_physical_count import InventoryPhysicalCountParams
from .inventory_adjustment import InventoryAdjustmentParams
from .inventory_transfer import InventoryTransferParams
from .catalog_measurement_unit import CatalogMeasurementUnitParams


class InventoryChangeParams(typing_extensions.TypedDict):
    """
    Represents a single physical count, inventory, adjustment, or transfer
    that is part of the history of inventory changes for a particular
    [CatalogObject](entity:CatalogObject) instance.
    """

    type: typing_extensions.NotRequired[InventoryChangeType]
    """
    Indicates how the inventory change is applied. See
    [InventoryChangeType](entity:InventoryChangeType) for all possible values.
    See [InventoryChangeType](#type-inventorychangetype) for possible values
    """

    physical_count: typing_extensions.NotRequired[InventoryPhysicalCountParams]
    """
    Contains details about the physical count when `type` is
    `PHYSICAL_COUNT`, and is unset for all other change types.
    """

    adjustment: typing_extensions.NotRequired[InventoryAdjustmentParams]
    """
    Contains details about the inventory adjustment when `type` is
    `ADJUSTMENT`, and is unset for all other change types.
    """

    transfer: typing_extensions.NotRequired[InventoryTransferParams]
    """
    Contains details about the inventory transfer when `type` is
    `TRANSFER`, and is unset for all other change types.
    
    _Note:_ An [InventoryTransfer](entity:InventoryTransfer) object can only be set in the input to the
    [BatchChangeInventory](api-endpoint:Inventory-BatchChangeInventory) endpoint when the seller has an active Retail Plus subscription.
    """

    measurement_unit: typing_extensions.NotRequired[CatalogMeasurementUnitParams]
    """
    The [CatalogMeasurementUnit](entity:CatalogMeasurementUnit) object representing the catalog measurement unit associated with the inventory change.
    """

    measurement_unit_id: typing_extensions.NotRequired[str]
    """
    The ID of the [CatalogMeasurementUnit](entity:CatalogMeasurementUnit) object representing the catalog measurement unit associated with the inventory change.
    """
