{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://agrodt.github.io/agrotool-knowledge-portal/schemas/v1/common.schema.json",
  "title": "AgroTool public data common definitions",
  "$defs": {
    "stableId": {
      "type": "string",
      "pattern": "^[A-Z][A-Z0-9_-]{3,63}$"
    },
    "recordVersion": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
    },
    "date": {
      "type": "string",
      "format": "date"
    },
    "publicStatus": {
      "enum": ["active", "deprecated", "withdrawn"]
    },
    "provenanceClass": {
      "enum": ["canonical_corpus", "derived", "project_authored"]
    },
    "licenseClass": {
      "enum": [
        "project_cc_by_4_0",
        "third_party_metadata_source_terms",
        "public_domain",
        "link_only"
      ]
    },
    "translationStatus": {
      "enum": ["source", "machine_draft", "reviewed", "approved", "fallback_ru"]
    },
    "translationEntry": {
      "type": "object",
      "additionalProperties": false,
      "required": ["text", "status"],
      "properties": {
        "text": { "type": "string", "minLength": 1 },
        "status": { "$ref": "#/$defs/translationStatus" }
      }
    },
    "localizedText": {
      "type": "object",
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "ru": { "$ref": "#/$defs/translationEntry" },
        "en": { "$ref": "#/$defs/translationEntry" },
        "es": { "$ref": "#/$defs/translationEntry" },
        "zh-Hans": { "$ref": "#/$defs/translationEntry" }
      }
    },
    "period": {
      "type": "object",
      "additionalProperties": false,
      "required": ["from", "to"],
      "properties": {
        "from": {
          "type": ["integer", "null"],
          "minimum": 1800,
          "maximum": 2200
        },
        "to": { "type": ["integer", "null"], "minimum": 1800, "maximum": 2200 }
      }
    },
    "recordMetadata": {
      "type": "object",
      "required": [
        "record_version",
        "public_status",
        "provenance_class",
        "license_class",
        "last_verified_at"
      ],
      "properties": {
        "record_version": { "$ref": "#/$defs/recordVersion" },
        "public_status": { "$ref": "#/$defs/publicStatus" },
        "provenance_class": { "$ref": "#/$defs/provenanceClass" },
        "license_class": { "$ref": "#/$defs/licenseClass" },
        "last_verified_at": { "$ref": "#/$defs/date" },
        "valid_from": { "$ref": "#/$defs/date" },
        "valid_to": {
          "anyOf": [{ "$ref": "#/$defs/date" }, { "type": "null" }]
        }
      }
    },
    "sourceIds": {
      "type": "array",
      "items": { "type": "string", "pattern": "^S[A-Z0-9_-]{3,63}$" },
      "uniqueItems": true
    },
    "evidenceIds": {
      "type": "array",
      "items": { "type": "string", "pattern": "^E[A-Z0-9_-]{3,63}$" },
      "uniqueItems": true
    }
  }
}
