@startuml

hide methods
enum CartOrigin {
    CUSTOMER
    MERCHANT
    QUOTE
}
interface Cart [[Cart.svg]]  {
    id: String
    version: Long
    createdAt: DateTime
    lastModifiedAt: DateTime
    key: String
    customerId: String
    customerEmail: String
    customerGroup: [[CustomerGroupReference.svg CustomerGroupReference]]
    anonymousId: String
    businessUnit: [[BusinessUnitKeyReference.svg BusinessUnitKeyReference]]
    store: [[StoreKeyReference.svg StoreKeyReference]]
    lineItems: [[LineItem.svg List<LineItem>]]
    customLineItems: [[CustomLineItem.svg List<CustomLineItem>]]
    totalLineItemQuantity: Long
    totalPrice: [[CentPrecisionMoney.svg CentPrecisionMoney]]
    taxedPrice: [[TaxedPrice.svg TaxedPrice]]
    taxedShippingPrice: [[TaxedPrice.svg TaxedPrice]]
    taxMode: [[TaxMode.svg TaxMode]]
    taxRoundingMode: [[RoundingMode.svg RoundingMode]]
    taxCalculationMode: [[TaxCalculationMode.svg TaxCalculationMode]]
    inventoryMode: [[InventoryMode.svg InventoryMode]]
    cartState: [[CartState.svg CartState]]
    billingAddress: [[Address.svg Address]]
    shippingAddress: [[Address.svg Address]]
    shippingMode: [[ShippingMode.svg ShippingMode]]
    shippingKey: String
    shippingInfo: [[ShippingInfo.svg ShippingInfo]]
    shippingRateInput: [[ShippingRateInput.svg ShippingRateInput]]
    shippingCustomFields: [[CustomFields.svg CustomFields]]
    shipping: [[Shipping.svg List<Shipping>]]
    itemShippingAddresses: [[Address.svg List<Address>]]
    discountCodes: [[DiscountCodeInfo.svg List<DiscountCodeInfo>]]
    directDiscounts: [[DirectDiscount.svg List<DirectDiscount>]]
    refusedGifts: [[CartDiscountReference.svg List<CartDiscountReference>]]
    paymentInfo: [[PaymentInfo.svg PaymentInfo]]
    country: String
    locale: String
    origin: [[CartOrigin.svg CartOrigin]]
    custom: [[CustomFields.svg CustomFields]]
    deleteDaysAfterLastModification: Integer
    lastModifiedBy: [[LastModifiedBy.svg LastModifiedBy]]
    createdBy: [[CreatedBy.svg CreatedBy]]
}
interface CartDraft [[CartDraft.svg]]  {
    currency: String
    key: String
    customerId: String
    customerEmail: String
    customerGroup: [[CustomerGroupResourceIdentifier.svg CustomerGroupResourceIdentifier]]
    anonymousId: String
    businessUnit: [[BusinessUnitResourceIdentifier.svg BusinessUnitResourceIdentifier]]
    store: [[StoreResourceIdentifier.svg StoreResourceIdentifier]]
    lineItems: [[LineItemDraft.svg List<LineItemDraft>]]
    customLineItems: [[CustomLineItemDraft.svg List<CustomLineItemDraft>]]
    taxMode: [[TaxMode.svg TaxMode]]
    externalTaxRateForShippingMethod: [[ExternalTaxRateDraft.svg ExternalTaxRateDraft]]
    taxRoundingMode: [[RoundingMode.svg RoundingMode]]
    taxCalculationMode: [[TaxCalculationMode.svg TaxCalculationMode]]
    inventoryMode: [[InventoryMode.svg InventoryMode]]
    billingAddress: [[BaseAddress.svg BaseAddress]]
    shippingAddress: [[BaseAddress.svg BaseAddress]]
    shippingMethod: [[ShippingMethodResourceIdentifier.svg ShippingMethodResourceIdentifier]]
    shippingRateInput: [[ShippingRateInputDraft.svg ShippingRateInputDraft]]
    shippingMode: [[ShippingMode.svg ShippingMode]]
    customShipping: [[CustomShippingDraft.svg List<CustomShippingDraft>]]
    shipping: [[ShippingDraft.svg List<ShippingDraft>]]
    itemShippingAddresses: [[BaseAddress.svg List<BaseAddress>]]
    discountCodes: [[String.svg List<String>]]
    country: String
    locale: String
    origin: [[CartOrigin.svg CartOrigin]]
    deleteDaysAfterLastModification: Long
    custom: [[CustomFieldsDraft.svg CustomFieldsDraft]]
}
interface Order [[Order.svg]]  {
    id: String
    version: Long
    createdAt: DateTime
    lastModifiedAt: DateTime
    orderNumber: String
    purchaseOrderNumber: String
    customerId: String
    customerEmail: String
    customerGroup: [[CustomerGroupReference.svg CustomerGroupReference]]
    anonymousId: String
    businessUnit: [[BusinessUnitKeyReference.svg BusinessUnitKeyReference]]
    store: [[StoreKeyReference.svg StoreKeyReference]]
    lineItems: [[LineItem.svg List<LineItem>]]
    customLineItems: [[CustomLineItem.svg List<CustomLineItem>]]
    totalPrice: [[TypedMoney.svg TypedMoney]]
    taxedPrice: [[TaxedPrice.svg TaxedPrice]]
    taxedShippingPrice: [[TaxedPrice.svg TaxedPrice]]
    taxMode: [[TaxMode.svg TaxMode]]
    taxRoundingMode: [[RoundingMode.svg RoundingMode]]
    taxCalculationMode: [[TaxCalculationMode.svg TaxCalculationMode]]
    inventoryMode: [[InventoryMode.svg InventoryMode]]
    billingAddress: [[Address.svg Address]]
    shippingAddress: [[Address.svg Address]]
    shippingMode: [[ShippingMode.svg ShippingMode]]
    shippingKey: String
    shippingInfo: [[ShippingInfo.svg ShippingInfo]]
    shippingRateInput: [[ShippingRateInput.svg ShippingRateInput]]
    shippingCustomFields: [[CustomFields.svg CustomFields]]
    shipping: [[Shipping.svg List<Shipping>]]
    itemShippingAddresses: [[Address.svg List<Address>]]
    discountCodes: [[DiscountCodeInfo.svg List<DiscountCodeInfo>]]
    directDiscounts: [[DirectDiscount.svg List<DirectDiscount>]]
    refusedGifts: [[CartDiscountReference.svg List<CartDiscountReference>]]
    paymentInfo: [[PaymentInfo.svg PaymentInfo]]
    country: String
    locale: String
    origin: [[CartOrigin.svg CartOrigin]]
    cart: [[CartReference.svg CartReference]]
    quote: [[QuoteReference.svg QuoteReference]]
    orderState: [[OrderState.svg OrderState]]
    shipmentState: [[ShipmentState.svg ShipmentState]]
    paymentState: [[PaymentState.svg PaymentState]]
    state: [[StateReference.svg StateReference]]
    syncInfo: [[SyncInfo.svg List<SyncInfo>]]
    returnInfo: [[ReturnInfo.svg List<ReturnInfo>]]
    lastMessageSequenceNumber: Long
    custom: [[CustomFields.svg CustomFields]]
    completedAt: DateTime
    lastModifiedBy: [[LastModifiedBy.svg LastModifiedBy]]
    createdBy: [[CreatedBy.svg CreatedBy]]
}
interface OrderImportDraft [[OrderImportDraft.svg]]  {
    orderNumber: String
    customerId: String
    customerEmail: String
    lineItems: [[LineItemImportDraft.svg List<LineItemImportDraft>]]
    customLineItems: [[CustomLineItemImportDraft.svg List<CustomLineItemImportDraft>]]
    totalPrice: [[Money.svg Money]]
    taxedPrice: [[TaxedPriceDraft.svg TaxedPriceDraft]]
    shippingAddress: [[BaseAddress.svg BaseAddress]]
    billingAddress: [[BaseAddress.svg BaseAddress]]
    customerGroup: [[CustomerGroupResourceIdentifier.svg CustomerGroupResourceIdentifier]]
    country: String
    orderState: [[OrderState.svg OrderState]]
    state: [[StateReference.svg StateReference]]
    shipmentState: [[ShipmentState.svg ShipmentState]]
    paymentState: [[PaymentState.svg PaymentState]]
    shippingInfo: [[ShippingInfoImportDraft.svg ShippingInfoImportDraft]]
    paymentInfo: [[PaymentInfo.svg PaymentInfo]]
    completedAt: DateTime
    custom: [[CustomFieldsDraft.svg CustomFieldsDraft]]
    inventoryMode: [[InventoryMode.svg InventoryMode]]
    taxRoundingMode: [[RoundingMode.svg RoundingMode]]
    itemShippingAddresses: [[BaseAddress.svg List<BaseAddress>]]
    businessUnit: [[BusinessUnitResourceIdentifier.svg BusinessUnitResourceIdentifier]]
    store: [[StoreResourceIdentifier.svg StoreResourceIdentifier]]
    origin: [[CartOrigin.svg CartOrigin]]
}
CartOrigin --> Cart #green;text:green : "origin"
CartOrigin --> CartDraft #green;text:green : "origin"
CartOrigin --> Order #green;text:green : "origin"
CartOrigin --> OrderImportDraft #green;text:green : "origin"
@enduml
