{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://qazpolit.com/contracts/qazpolit-research-manifest-v1.schema.json",
  "title": "QazPolit Research Manifest v1",
  "type": "object",
  "required": ["schema", "generated_at", "parameters", "scope", "evidence", "gaps", "completion", "limits"],
  "properties": {
    "schema": {"const": "qazpolit.research-manifest.v1"},
    "generated_at": {"type": "string", "format": "date-time"},
    "parameters": {
      "type": "object",
      "required": ["language", "requested_slugs"],
      "properties": {
        "language": {"enum": ["ru", "kz", "en"]},
        "requested_slugs": {"type": "array", "items": {"type": "string", "minLength": 1}}
      },
      "additionalProperties": false
    },
    "scope": {
      "type": "object",
      "required": ["requested_profiles", "included_profiles", "unique_public_sources"],
      "properties": {
        "requested_profiles": {"type": "integer", "minimum": 0},
        "included_profiles": {"type": "integer", "minimum": 0},
        "unique_public_sources": {"type": "integer", "minimum": 0}
      },
      "additionalProperties": false
    },
    "evidence": {
      "type": "object",
      "required": ["receipt_schema", "receipt_contract", "item_receipts", "captured_item_receipts", "coverage"],
      "properties": {
        "receipt_schema": {"const": "qazpolit.evidence-receipt.v1"},
        "receipt_contract": {"const": "/contracts/qazpolit-evidence-receipt-v1.schema.json"},
        "item_receipts": {"type": "integer", "minimum": 0},
        "captured_item_receipts": {"type": "integer", "minimum": 0},
        "coverage": {
          "type": "object",
          "required": ["claims", "statements", "relationships", "events", "documents"],
          "properties": {
            "claims": {"$ref": "#/$defs/coverage"},
            "statements": {"$ref": "#/$defs/coverage"},
            "relationships": {"$ref": "#/$defs/coverage"},
            "events": {"$ref": "#/$defs/coverage"},
            "documents": {"$ref": "#/$defs/coverage"}
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "gaps": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["code", "count", "meaning"],
        "properties": {
          "code": {"type": "string", "minLength": 1},
          "count": {"type": "integer", "minimum": 1},
          "items": {"type": "array", "items": {"type": "string", "minLength": 1}},
          "meaning": {"type": "string", "minLength": 1}
        },
        "additionalProperties": false
      }
    },
    "completion": {
      "type": "object",
      "required": ["complete", "criterion"],
      "properties": {
        "complete": {"type": "boolean"},
        "criterion": {"type": "string", "minLength": 1}
      },
      "additionalProperties": false
    },
    "limits": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}}
  },
  "$defs": {
    "coverage": {
      "type": "object",
      "required": ["total", "source_aware", "open"],
      "properties": {
        "total": {"type": "integer", "minimum": 0},
        "source_aware": {"type": "integer", "minimum": 0},
        "open": {"type": "integer", "minimum": 0}
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
