{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.peptideschool.org/data/peptideschool-search-intent-landscape-v1.0.0.schema.json",
  "title": "PeptideSchool Peptide Research Search Intent Landscape",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "dataset",
    "scope",
    "summary",
    "sourceReferences",
    "inputFingerprints",
    "intentRecords",
    "policyRecords",
    "volumeBandCounts",
    "records"
  ],
  "properties": {
    "dataset": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "version",
        "canonicalPage",
        "license",
        "publisher",
        "author",
        "language",
        "publicationDate",
        "reviewDate",
        "citation"
      ],
      "properties": {
        "id": {
          "const": "peptideschool-peptide-research-search-intent-landscape"
        },
        "version": {
          "const": "1.0.0"
        },
        "canonicalPage": {
          "const": "https://www.peptideschool.org/peptide-research-search-intent-landscape"
        },
        "license": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "spdx",
            "url",
            "scope"
          ],
          "properties": {
            "spdx": {
              "const": "CC-BY-4.0"
            },
            "url": {
              "const": "https://creativecommons.org/licenses/by/4.0/"
            },
            "scope": {
              "type": "string",
              "minLength": 120
            }
          }
        },
        "publisher": {
          "const": "PeptideSchool"
        },
        "author": {
          "const": "PeptideSchool Editorial Desk"
        },
        "language": {
          "const": "en-US"
        },
        "publicationDate": {
          "type": "string",
          "format": "date"
        },
        "reviewDate": {
          "type": "string",
          "format": "date"
        },
        "citation": {
          "type": "string",
          "minLength": 100
        }
      }
    },
    "scope": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "purpose",
        "sourceWindow",
        "geography",
        "language",
        "network",
        "device",
        "sourceMethod",
        "included",
        "excluded",
        "interpretation"
      ],
      "properties": {
        "purpose": {
          "type": "string",
          "minLength": 100
        },
        "sourceWindow": {
          "const": "2025-07-01/2026-06-30"
        },
        "geography": {
          "const": "United States"
        },
        "language": {
          "const": "English"
        },
        "network": {
          "const": "Google"
        },
        "device": {
          "type": "string",
          "minLength": 30
        },
        "sourceMethod": {
          "type": "string",
          "minLength": 180
        },
        "included": {
          "type": "string",
          "minLength": 100
        },
        "excluded": {
          "type": "string",
          "minLength": 160
        },
        "interpretation": {
          "type": "string",
          "minLength": 130
        }
      }
    },
    "summary": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "sourceBatchCount",
        "rawRowCount",
        "uniqueQueryCount",
        "duplicateRowsRemoved",
        "operationalKeywordCount",
        "combinedUniqueQueryCount",
        "clusterCount",
        "intentClassCount",
        "mappedEducationalQueryCount",
        "mappedEducationalSharePct",
        "uniqueMappedEducationalTargetCount",
        "calculatorReviewCandidateCount",
        "protectedOrExcludedQueryCount",
        "rawQueryTextPublished"
      ],
      "properties": {
        "sourceBatchCount": {
          "const": 6
        },
        "rawRowCount": {
          "const": 8696
        },
        "uniqueQueryCount": {
          "const": 7974
        },
        "duplicateRowsRemoved": {
          "const": 722
        },
        "operationalKeywordCount": {
          "const": 582
        },
        "combinedUniqueQueryCount": {
          "const": 8540
        },
        "clusterCount": {
          "const": 9
        },
        "intentClassCount": {
          "const": 8
        },
        "mappedEducationalQueryCount": {
          "const": 4592
        },
        "mappedEducationalSharePct": {
          "const": 57.59
        },
        "uniqueMappedEducationalTargetCount": {
          "const": 19
        },
        "calculatorReviewCandidateCount": {
          "const": 75
        },
        "protectedOrExcludedQueryCount": {
          "const": 116
        },
        "rawQueryTextPublished": {
          "const": false
        }
      }
    },
    "sourceReferences": {
      "type": "array",
      "minItems": 3,
      "maxItems": 3,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "title",
          "publisher",
          "url",
          "accessedAt",
          "relevance"
        ],
        "properties": {
          "title": {
            "type": "string",
            "minLength": 10
          },
          "publisher": {
            "type": "string",
            "minLength": 10
          },
          "url": {
            "type": "string",
            "pattern": "^https://"
          },
          "accessedAt": {
            "type": "string",
            "format": "date"
          },
          "relevance": {
            "type": "string",
            "minLength": 80
          }
        }
      }
    },
    "inputFingerprints": {
      "type": "array",
      "minItems": 6,
      "maxItems": 6,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "batch",
          "rowCount",
          "sha256"
        ],
        "properties": {
          "batch": {
            "type": "string",
            "pattern": "^[0-9]{2}-[a-z0-9-]+$"
          },
          "rowCount": {
            "type": "integer",
            "minimum": 1
          },
          "sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          }
        }
      }
    },
    "intentRecords": {
      "type": "array",
      "minItems": 8,
      "maxItems": 8,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "label",
          "queryCount",
          "sharePct",
          "interpretation"
        ],
        "properties": {
          "id": {
            "enum": [
              "study or evidence",
              "informational",
              "tool or calculation",
              "compound or peptide topic",
              "definition",
              "comparison",
              "commercial or transactional",
              "practical education"
            ]
          },
          "label": {
            "type": "string",
            "minLength": 5
          },
          "queryCount": {
            "type": "integer",
            "minimum": 1
          },
          "sharePct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "interpretation": {
            "type": "string",
            "minLength": 60
          }
        }
      }
    },
    "policyRecords": {
      "type": "array",
      "minItems": 6,
      "maxItems": 6,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "label",
          "queryCount",
          "action"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9_]+$"
          },
          "label": {
            "type": "string",
            "minLength": 10
          },
          "queryCount": {
            "type": "integer",
            "minimum": 1
          },
          "action": {
            "type": "string",
            "minLength": 40
          }
        }
      }
    },
    "volumeBandCounts": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "0",
        "10-99",
        "100-999",
        "1,000-9,999",
        "10,000+",
        "unknown"
      ],
      "properties": {
        "0": {
          "type": "integer",
          "minimum": 0
        },
        "10-99": {
          "type": "integer",
          "minimum": 0
        },
        "100-999": {
          "type": "integer",
          "minimum": 0
        },
        "1,000-9,999": {
          "type": "integer",
          "minimum": 0
        },
        "10,000+": {
          "type": "integer",
          "minimum": 0
        },
        "unknown": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "records": {
      "type": "array",
      "minItems": 9,
      "maxItems": 9,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "label",
          "queryCount",
          "sharePct",
          "mappedEducationalQueryCount",
          "mappingCoveragePct",
          "dominantIntent",
          "intentCounts",
          "volumeBandCounts",
          "organicAction",
          "paidBoundary",
          "interpretation"
        ],
        "properties": {
          "id": {
            "enum": [
              "research_methods",
              "general_science_review",
              "scientific_calculators",
              "peptide_science",
              "statistics_and_interpretation",
              "peptide_calculator",
              "peptide_evidence",
              "excluded_transactional",
              "laboratory_methods"
            ]
          },
          "label": {
            "type": "string",
            "minLength": 5
          },
          "queryCount": {
            "type": "integer",
            "minimum": 1
          },
          "sharePct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "mappedEducationalQueryCount": {
            "type": "integer",
            "minimum": 0
          },
          "mappingCoveragePct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "dominantIntent": {
            "enum": [
              "study or evidence",
              "informational",
              "tool or calculation",
              "compound or peptide topic",
              "definition",
              "comparison",
              "commercial or transactional",
              "practical education"
            ]
          },
          "intentCounts": {
            "type": "object",
            "minProperties": 1,
            "propertyNames": {
              "enum": [
                "study or evidence",
                "informational",
                "tool or calculation",
                "compound or peptide topic",
                "definition",
                "comparison",
                "commercial or transactional",
                "practical education"
              ]
            },
            "additionalProperties": {
              "type": "integer",
              "minimum": 1
            }
          },
          "volumeBandCounts": {
            "type": "object",
            "minProperties": 1,
            "propertyNames": {
              "enum": [
                "0",
                "10-99",
                "100-999",
                "1,000-9,999",
                "10,000+",
                "unknown"
              ]
            },
            "additionalProperties": {
              "type": "integer",
              "minimum": 1
            }
          },
          "organicAction": {
            "type": "string",
            "minLength": 100
          },
          "paidBoundary": {
            "type": "string",
            "minLength": 90
          },
          "interpretation": {
            "type": "string",
            "minLength": 100
          }
        }
      }
    }
  }
}
