{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://siybe.com/assets/schemas/observation.json",
  "title": "SIYB E Observation v1",
  "description": "观测交换示例契约；结构校验之外仍须检查指标单位、测点、时间和方法语义。",
  "type": "object",
  "required": ["metric_id", "value", "unit", "observed_at", "quality_flag", "sensor_id", "provenance"],
  "properties": {
    "metric_id": {"type":"string", "pattern":"^[a-z0-9-]+$"},
    "value": {"type":["number","null"]},
    "unit": {"type":"string", "minLength":1},
    "observed_at": {"type":"string", "format":"date-time"},
    "quality_flag": {"enum":["ok","suspect","invalid","corrected","missing","interpolated"]},
    "sensor_id": {"type":"string", "minLength":1},
    "site_id": {"type":"string", "minLength":1},
    "raw": {"type":"object"},
    "provenance": {
      "type":"object", "required":["source"],
      "properties": {
        "source":{"type":"string","minLength":1},
        "algorithm":{"type":["string","null"]},
        "calibration":{"type":["string","null"]},
        "reviewed_at":{"type":"string","format":"date"}
      }
    }
  },
  "allOf": [
    {"if":{"properties":{"quality_flag":{"const":"missing"}},"required":["quality_flag"]},"then":{"properties":{"value":{"type":"null"}}}},
    {"if":{"properties":{"quality_flag":{"enum":["ok","corrected","interpolated"]}},"required":["quality_flag"]},"then":{"properties":{"value":{"type":"number"}}}}
  ]
}
