{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "pulse",
  "type": "object",
  "required": ["published_at", "gauge", "tracker", "official", "gap_pp", "tracker_gap_pp", "next_print"],
  "additionalProperties": false,
  "properties": {
    "published_at": {"type": "string"},
    "gauge": {"$ref": "#/$defs/variant"},
    "tracker": {"$ref": "#/$defs/variant"},
    "official": {
      "type": "object",
      "required": ["yoy_pct", "prev_yoy_pct", "month"],
      "additionalProperties": false,
      "properties": {
        "yoy_pct": {"type": "number"},
        "prev_yoy_pct": {"type": "number"},
        "month": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}
      }
    },
    "gap_pp": {"type": "number"},
    "tracker_gap_pp": {"type": "number"},
    "next_print": {"oneOf": [
      {"type": "null"},
      {"type": "object",
       "required": ["date", "reference_month"],
       "additionalProperties": false,
       "properties": {
         "date": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"},
         "reference_month": {"type": "string", "pattern": "^\\d{4}-\\d{2}$"}}}]}
  },
  "$defs": {
    "variant": {
      "type": "object",
      "required": ["yoy_pct", "as_of", "coverage_pct"],
      "additionalProperties": false,
      "properties": {
        "yoy_pct": {"type": "number"},
        "as_of": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"},
        "coverage_pct": {"type": "number", "minimum": 0, "maximum": 100},
        "prev_yoy_pct": {"type": ["number", "null"]},
        "prev_as_of": {"type": ["string", "null"]}
      }
    }
  }
}
