{
  "$id": "https://www.hestia.earth/schema-data/json-schema/Transport.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$comment": "Schema version 39.0.1",
  "title": "Transport",
  "description": "The transport of a [Product](/schema/Product), [Input](/schema/Input), or item of [Infrastructure](/schema/Infrastructure) to or from a [Cycle](/schema/Cycle).\n",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "description": "Type of the Node",
      "default": "Transport",
      "enum": [
        "Transport"
      ]
    },
    "@type": {
      "type": "string",
      "description": "Type of the Node",
      "default": "Transport",
      "enum": [
        "Transport"
      ],
      "extend": true
    },
    "term": {
      "$ref": "./Term-deep.json#",
      "description": "A reference to the Term describing the Transport mode.",
      "examples": [
        {
          "@id": "freightLorry32MetricTon",
          "@type": "Term",
          "name": "Freight, lorry, >32 metric ton",
          "units": "tkm",
          "termType": "transport"
        }
      ],
      "searchable": true,
      "exportDefaultCSV": true
    },
    "description": {
      "type": "string",
      "description": "A description of the Transport mode.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "value": {
      "type": "number",
      "minimum": 0,
      "description": "The distance transported times the number of tonnes transported. E.g., if 40 kg of Urea (kg N) are used during the Cycle, the nitrogen content of Urea is 45.5%, and the urea was transported 91 km, this field is calculated as 40 / 1000 / 45.5% * 91 = 8 tonne kilometers.",
      "examples": [
        8
      ],
      "searchable": true,
      "exportDefaultCSV": true,
      "recommended": true
    },
    "distribution": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "An array of up to 1000 random samples from the posterior distribution of value</code. This should describe the entire distribution of the dataset and not the distribution of the mean.",
      "examples": [],
      "exportDefaultCSV": true,
      "maxItems": 1000
    },
    "sd": {
      "type": "number",
      "minimum": 0,
      "description": "The standard deviation of value.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "min": {
      "type": "number",
      "minimum": 0,
      "description": "The minimum of value.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "max": {
      "type": "number",
      "minimum": 0,
      "description": "The maximum of value.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "percentile10th": {
      "type": "number",
      "description": "The 10th percentile of value.",
      "examples": [],
      "exportDefaultCSV": false,
      "internal": true
    },
    "percentile90th": {
      "type": "number",
      "description": "The 90th percentile of value.",
      "examples": [],
      "exportDefaultCSV": false,
      "internal": true
    },
    "statsDefinition": {
      "type": "string",
      "description": "What the descriptive statistics (sd, min, max, and value) are calculated across, or whether they are simulated or the output of a model. Spatial is descriptive statistics calculated across spatial units (e.g., pixels) within a region or country.",
      "examples": [],
      "enum": [
        "cycles",
        "replications",
        "other observations",
        "spatial",
        "regions",
        "simulated",
        "modelled"
      ],
      "exportDefaultCSV": true
    },
    "observations": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "number",
            "minimum": 1
          },
          {
            "type": "null"
          }
        ]
      },
      "description": "The number of observations the descriptive statistics are calculated over.",
      "examples": [],
      "searchable": true,
      "minimum": 1,
      "exportDefaultCSV": true
    },
    "distance": {
      "type": "number",
      "minimum": 0,
      "description": "The distance transported in kilometers.",
      "examples": [],
      "searchable": true,
      "exportDefaultCSV": true,
      "recommended": true
    },
    "distanceSd": {
      "type": "number",
      "minimum": 0,
      "description": "The standard deviation of distance.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "distanceMin": {
      "type": "number",
      "minimum": 0,
      "description": "The minimum of distance.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "distanceMax": {
      "type": "number",
      "minimum": 0,
      "description": "The maximum of distance.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "distanceStatsDefinition": {
      "type": "string",
      "description": "What the descriptive statistics (distanceSd, distanceMin, distanceMax, and distance) are calculated across, or whether they are simulated or the output of a model. spatial refers to descriptive statistics calculated across spatial units (e.g., pixels) within a region or country. time refers to descriptive statistics calculated across units of time (e.g., hours).",
      "examples": [],
      "enum": [
        "cycles",
        "replications",
        "other observations",
        "time",
        "spatial",
        "regions",
        "simulated",
        "modelled"
      ],
      "exportDefaultCSV": true
    },
    "distanceObservations": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "number",
            "minimum": 1
          },
          {
            "type": "null"
          }
        ]
      },
      "description": "The number of observations the descriptive statistics for distance are calculated over.",
      "examples": [],
      "searchable": true,
      "minimum": 1,
      "exportDefaultCSV": true
    },
    "returnLegIncluded": {
      "type": "boolean",
      "description": "Whether the return leg is included in value and distance.",
      "examples": []
    },
    "methodModel": {
      "$ref": "./Term-deep.json#",
      "description": "A reference to the Term describing the method or model used to acquire or estimate these data.",
      "examples": [],
      "searchable": true,
      "exportDefaultCSV": true
    },
    "methodModelDescription": {
      "type": "string",
      "description": "A free text field, describing the method or model used to acquire or estimate these data.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "methodClassification": {
      "type": "string",
      "description": "A classification of the method used to acquire or estimate the term and value. Overrides the defaultMethodClassification specified in the Cycle. methodClassification should be specified separately for inputs (see Input) and practices (see Practice).    physical measurement means the amount is quantified using weighing,\n    volume measurement, metering, chemical methods, or other physical approaches.\n\n    verified survey data means the data are initially collected through\n    surveys; all or a subset of the data are verified using physical methods; and\n    erroneous survey data are discarded or corrected.\n\n    non-verified survey data means the data are collected through\n    surveys that have not been subjected to verification.\n\n    modelled means a previously calibrated model is used to estimate\n    this data point from other data points describing this Cycle.\n\n    estimated with assumptions means a documented assumption is used\n    to estimate this data point from other data points describing this Cycle.\n\n    consistent external sources means the data are taken from external\n    datasets referring to different producers/enterprises:\n\n        Using the same technology (defined as the same\n        System or the same key Practices\n        as those specified in the Cycle);\n\n        At the same date (defined as occurring within the\n        startDate and endDate of the Cycle);\n        and\n\n        In the same region or country.\n\n    Modelling or assumptions may have also been used to transform these data.\n\n    inconsistent external sources means the data are taken from external\n    datasets referring to different producers/enterprises:\n\n        Using a different technology (defined as a different\n        System or using different key\n        Practices to those specified in the Cycle);\n\n        At a different date (defined as occurring within the\n        startDate and endDate of the Cycle);\n        or\n\n        In a different region or country.\n\n    Modelling or assumptions may have also been used to transform these data.\n\n    expert opinion means the data have been estimated by experts in\n    the field.\n\n    unsourced assumption means the data do not have a clear source\n    and/or are based on assumptions only.\n",
      "examples": [
        "modelled"
      ],
      "enum": [
        "physical measurement",
        "verified survey data",
        "non-verified survey data",
        "modelled",
        "estimated with assumptions",
        "consistent external sources",
        "inconsistent external sources",
        "expert opinion",
        "unsourced assumption"
      ],
      "searchable": true,
      "exportDefaultCSV": true
    },
    "methodClassificationDescription": {
      "type": "string",
      "description": "A justification of the methodClassification used. If the data were estimated with assumptions this field should also describe the assumptions. This is a required field if methodClassification is specified.",
      "examples": [
        "Distance estimated using approximate road distance to likely supplier, assuming 100% load factor."
      ],
      "exportDefaultCSV": true
    },
    "source": {
      "$ref": "./Source-deep.json#",
      "description": "A reference to the Source of these data.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "otherSources": {
      "type": "array",
      "items": {
        "$ref": "./Source-deep.json#"
      },
      "description": "A list of references to any other sources of these data.",
      "examples": [],
      "exportDefaultCSV": true
    },
    "inputs": {
      "type": "array",
      "items": {
        "$ref": "./Input.json#"
      },
      "description": "The Inputs into the Transport process (e.g., diesel).",
      "examples": [],
      "searchable": true,
      "exportDefaultCSV": true,
      "uniqueArrayItem": [
        "term.@id",
        "dates",
        "startDate",
        "endDate",
        "operation.@id",
        "country.@id"
      ]
    },
    "practices": {
      "type": "array",
      "items": {
        "$ref": "./Practice.json#"
      },
      "description": "The Practices used.",
      "examples": [],
      "searchable": true,
      "exportDefaultCSV": true,
      "uniqueArrayItem": [
        "term.@id",
        "description",
        "key.@id",
        "dates",
        "startDate",
        "endDate",
        "areaPercent",
        "ownershipStatus"
      ]
    },
    "emissions": {
      "type": "array",
      "items": {
        "$ref": "./Emission.json#"
      },
      "description": "The Emissions created during Transport.",
      "examples": [
        [
          {
            "@type": "Emission",
            "term": {
              "@id": "co2ToAirFuelCombustion",
              "@type": "Term",
              "name": "CO2, to air, fuel combustion",
              "units": "kg CO2",
              "termType": "emission"
            },
            "value": [
              0.7
            ],
            "methodModel": {
              "@id": "emepEea2019",
              "@type": "Term",
              "name": "EMEA-EEA (2019)",
              "termType": "model"
            },
            "methodTier": "tier 1"
          }
        ]
      ],
      "searchable": true,
      "exportDefaultCSV": true,
      "uniqueArrayItem": [
        "term.@id",
        "dates",
        "startDate",
        "endDate",
        "depthUpper",
        "depthLower",
        "inputs.@id"
      ]
    },
    "schemaVersion": {
      "type": "string",
      "description": "The version of the schema when these data were created.",
      "examples": [],
      "internal": true
    },
    "added": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of fields that have been added to the original dataset.",
      "examples": [],
      "internal": true
    },
    "addedVersion": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of versions of the model used to add these fields.",
      "examples": [],
      "internal": true
    },
    "updated": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of fields that have been updated on the original dataset.",
      "examples": [],
      "internal": true
    },
    "updatedVersion": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of versions of the model used to update these fields.",
      "examples": [],
      "internal": true
    },
    "aggregated": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of fields that have been 'aggregated' using data from multiple Sites and Cycles.",
      "examples": [],
      "internal": true
    },
    "aggregatedVersion": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "A list of versions of the aggregation engine corresponding to each aggregated field.",
      "examples": [],
      "internal": true
    }
  },
  "allOf": [
    {
      "if": {
        "required": [
          "term"
        ]
      },
      "then": {
        "properties": {
          "term": {
            "properties": {
              "termType": {
                "enum": [
                  "transport"
                ]
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "required": [
          "methodModel"
        ]
      },
      "then": {
        "properties": {
          "methodModel": {
            "properties": {
              "termType": {
                "enum": [
                  "model"
                ]
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "anyOf": [
          {
            "required": [
              "min"
            ]
          },
          {
            "required": [
              "max"
            ]
          },
          {
            "required": [
              "sd"
            ]
          }
        ]
      },
      "then": {
        "required": [
          "statsDefinition"
        ]
      }
    },
    {
      "if": {
        "required": [
          "statsDefinition"
        ]
      },
      "then": {
        "anyOf": [
          {
            "required": [
              "value"
            ]
          },
          {
            "required": [
              "min"
            ]
          },
          {
            "required": [
              "max"
            ]
          },
          {
            "required": [
              "sd"
            ]
          }
        ]
      }
    },
    {
      "if": {
        "required": [
          "practices"
        ]
      },
      "then": {
        "properties": {
          "practices": {
            "items": {
              "properties": {
                "term": {
                  "properties": {
                    "termType": {
                      "enum": [
                        "operation"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "required": [
          "methodClassification"
        ]
      },
      "then": {
        "required": [
          "methodClassificationDescription"
        ]
      }
    }
  ],
  "oneOf": [
    {
      "required": [
        "@type"
      ]
    },
    {
      "required": [
        "type"
      ]
    }
  ],
  "required": [
    "term",
    "returnLegIncluded"
  ]
}