{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "schema:ParcelDelivery",
  "title": "ParcelDelivery",
  "description": "The delivery of a parcel either via the postal service or a commercial service.",
  "type": "object",
  "allOf": [
    {
      "description": "A utility class that serves as the umbrella for a number of 'intangible' things such as quantities, structured values, etc.",
      "$ref": "schema:Intangible"
    }
  ],
  "properties": {
    "carrier": {
      "description": "'carrier' is an out-dated term indicating the 'provider' for parcel delivery and flights.",
      "$ref": "schema:Organization"
    },
    "deliveryAddress": {
      "description": "Destination address.",
      "$ref": "schema:PostalAddress"
    },
    "deliveryStatus": {
      "description": "New entry added as the package passes through each leg of its journey (from shipment to final delivery).",
      "oneOf": [
        { "$ref": "schema:DeliveryEvent" },
        { "type": "array", "items": { "$ref": "schema:DeliveryEvent" } }
      ]
    },
    "expectedArrivalFrom": {
      "description": "The earliest date the package may arrive.",
      "anyOf": [
        { "type": "string", "format": "date" },
        { "type": "string", "format": "date-time" }
      ]
    },
    "expectedArrivalUntil": {
      "description": "The latest date the package may arrive.",
      "anyOf": [
        { "type": "string", "format": "date" },
        { "type": "string", "format": "date-time" }
      ]
    },
    "hasDeliveryMethod": {
      "description": "Method used for delivery or shipping.",
      "$ref": "schema:DeliveryMethod"
    },
    "itemShipped": {
      "description": "Item(s) being shipped.",
      "oneOf": [
        { "$ref": "schema:Product" },
        { "type": "array", "items": { "$ref": "schema:Product" } }
      ]
    },
    "originAddress": {
      "description": "Shipper's address.",
      "$ref": "schema:PostalAddress"
    },
    "partOfOrder": {
      "description": "The overall order the items in this delivery were included in.",
      "$ref": "schema:Order"
    },
    "provider": {
      "description": "The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller.",
      "anyOf": [{ "$ref": "schema:Organization" }, { "$ref": "schema:Person" }]
    },
    "trackingNumber": {
      "description": "Shipper tracking number.",
      "type": "string"
    },
    "trackingUrl": {
      "description": "Tracking url for the parcel delivery.",
      "type": "string",
      "format": "uri"
    }
  }
}
