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

from ..core.unchecked_base_model import UncheckedBaseModel
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2


class FulfillmentFulfillmentEntry(UncheckedBaseModel):
    """
    Links an order line item to a fulfillment. Each entry must reference
    a valid `uid` for an order line item in the `line_item_uid` field, as well as a `quantity` to
    fulfill.
    """

    uid: typing.Optional[str] = pydantic.Field(default=None)
    """
    A unique ID that identifies the fulfillment entry only within this order.
    """

    line_item_uid: str = pydantic.Field()
    """
    The `uid` from the order line item.
    """

    quantity: str = pydantic.Field()
    """
    The quantity of the line item being fulfilled, formatted as a decimal number.
    For example, `"3"`.
    
    Fulfillments for line items with a `quantity_unit` can have non-integer quantities.
    For example, `"1.70000"`.
    """

    metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = pydantic.Field(default=None)
    """
    Application-defined data attached to this fulfillment entry. Metadata fields are intended
    to store descriptive references or associations with an entity in another system or store brief
    information about the object. Square does not process this field; it only stores and returns it
    in relevant API calls. Do not use metadata to store any sensitive information (such as personally
    identifiable information or card details).
    
    Keys written by applications must be 60 characters or less and must be in the character set
    `[a-zA-Z0-9_-]`. Entries can also include metadata generated by Square. These keys are prefixed
    with a namespace, separated from the key with a ':' character.
    
    Values have a maximum length of 255 characters.
    
    An application can have up to 10 entries per metadata field.
    
    Entries written by applications are private and can only be read or modified by the same
    application.
    
    For more information, see [Metadata](https://developer.squareup.com/docs/build-basics/metadata).
    """

    if IS_PYDANTIC_V2:
        model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)  # type: ignore # Pydantic v2
    else:

        class Config:
            frozen = True
            smart_union = True
            extra = pydantic.Extra.allow
