{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://trp.ecoclaim.ca/schemas/v3/common.schema.json",
  "title": "TRP common definitions",
  "description": "Shared definitions and the common resource envelope. Draft 3.0.0-draft.",
  "$defs": {
    "identifier": { "type": "string", "minLength": 1, "maxLength": 512 },
    "timestamp": { "type": "string", "format": "date-time" },
    "date": { "type": "string", "format": "date" },
    "quantity": {
      "type": "object",
      "required": ["value", "unit"],
      "properties": {
        "value": { "type": "number" },
        "unit": { "type": "string", "minLength": 1 }
      },
      "additionalProperties": false
    },
    "resourceStatus": {
      "enum": ["observed", "submitted", "validated", "accepted", "rejected", "superseded"]
    },
    "verificationStatus": {
      "enum": ["unverified", "reported", "documented", "verified", "disputed"]
    },
    "dataGrade": { "enum": ["A", "B", "C", "D", "E"] },
    "evidenceIds": {
      "type": "array",
      "items": { "$ref": "#/$defs/identifier" },
      "uniqueItems": true
    },
    "envelope": {
      "type": "object",
      "required": ["id", "type", "schema_version", "created_at", "source_system", "status"],
      "properties": {
        "id": { "$ref": "#/$defs/identifier" },
        "type": { "type": "string", "pattern": "^trp\\.[a-z][a-z0-9_]*$" },
        "schema_version": { "type": "string", "pattern": "^3\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$" },
        "created_at": { "$ref": "#/$defs/timestamp" },
        "updated_at": { "$ref": "#/$defs/timestamp" },
        "effective_at": { "$ref": "#/$defs/timestamp" },
        "source_system": { "$ref": "#/$defs/identifier" },
        "source_record_id": { "$ref": "#/$defs/identifier" },
        "organization_id": { "$ref": "#/$defs/identifier" },
        "claim_id": { "$ref": "#/$defs/identifier" },
        "data_classification": { "enum": ["public", "internal", "confidential", "restricted"] },
        "provenance": { "type": "object" },
        "evidence_ids": { "$ref": "#/$defs/evidenceIds" },
        "revision": { "type": "integer", "minimum": 1 },
        "supersedes_id": { "$ref": "#/$defs/identifier" },
        "status": { "$ref": "#/$defs/resourceStatus" },
        "extensions": { "type": "object" }
      }
    }
  }
}
