{
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "urn:wcs:exchange:submission-envelope:v1",
 "title": "WCS exchange submission envelope",
 "$comment": "Structural developer reference. Fetch live requirements for parameter keys, units, required fields and contract SHA. This schema alone does not prove complete/valid engineering inputs or measured evidence.",
 "type": "object",
 "additionalProperties": false,
 "required": ["schema_version","template","source_reference","requirements_sha256","values"],
 "properties": {
  "schema_version": {"const":"wcs.exchange.v1"},
  "template": {"type":"string","pattern":"^[A-Z]{2,8}-[0-9]{2,4}$"},
  "source_reference": {"type":"string","minLength":1,"maxLength":250},
  "requirements_sha256": {"type":"string","pattern":"^[a-f0-9]{64}$"},
  "title": {"type":"string"},
  "paper": {"enum":["A3","A1"],"description":"Omission means A3 on server; no other design defaults are filled."},
  "values": {"type":"object","additionalProperties":{"$ref":"#/$defs/provenance"}},
  "evidence": {"type":"array","maxItems":100,"items":{"type":"object","required":["id","title","source_reference","sha256"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,120}$"},"title":{"type":"string","minLength":1},"source_reference":{"type":"string","minLength":1},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}}}},
  "location": {"type":"object","additionalProperties":false,"required":["crs","longitude","latitude","classification","source_reference"],"properties":{"crs":{"const":"EPSG:4326"},"longitude":{"type":"number","minimum":-180,"maximum":180},"latitude":{"type":"number","minimum":-85,"maximum":85},"classification":{"enum":["user_supplied","assumed"]},"source_reference":{"type":"string","minLength":1}}}
 },
 "$defs": {
  "provenance": {
   "type":"object","additionalProperties":false,
   "required":["value","classification","source_reference"],
   "properties":{"value":{"type":["number","string"]},"unit":{"type":"string"},"classification":{"enum":["user_supplied","measured","standard","designer_selected","assumed"]},"source_reference":{"type":"string","minLength":1},"observed_on":{"type":"string","format":"date"},"method":{"type":"string","minLength":1},"evidence_ids":{"type":"array","items":{"type":"string"},"minItems":1}},
   "if":{"properties":{"classification":{"const":"measured"}},"required":["classification"]},
   "then":{"required":["observed_on","method","evidence_ids"]}
  }
 }
}
