{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://pmf.finance/peril-markets/downloads/rhine-ladder.schema.json",
  "title": "Provisional Rhine low-water duration ladder",
  "type": "object",
  "required": ["schema_version", "methodology", "status", "source_snapshot", "source_manifest_sha256", "observation_period", "measurement", "threshold_generation", "thresholds", "operator", "weights_percent", "basket_maximum_percent", "currency", "unit_payout", "history"],
  "properties": {
    "schema_version": {"const": "1.0"},
    "methodology": {"const": "rhine-kaub-low-water/0.4.0"},
    "status": {"type": "string"},
    "source_snapshot": {"const": "frozen-2020-2025"},
    "source_manifest_sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
    "observation_period": {"type": "string"},
    "measurement": {"type": "string"},
    "threshold_generation": {"type": "string"},
    "thresholds": {"type": "array", "prefixItems": [{"const": 5}, {"const": 14}, {"const": 26}, {"const": 39}, {"const": 55}, {"const": 72}, {"const": 90}, {"const": 110}, {"const": 131}, {"const": 153}], "minItems": 10, "maxItems": 10},
    "operator": {"const": ">="},
    "weights_percent": {"type": "array", "prefixItems": [{"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}, {"const": 10}], "minItems": 10, "maxItems": 10},
    "basket_maximum_percent": {"const": 100},
    "currency": {"const": "EUR"},
    "unit_payout": {"const": 1},
    "history": {"type": "array", "items": {"type": "object", "required": ["year", "minimum", "maximum", "scheduled_days", "complete_days", "unknown_days", "minimum_yes", "maximum_yes", "minimum_payout_percent", "maximum_payout_percent", "source", "history_status"], "properties": {"year": {"type": "integer"}, "minimum": {"type": "integer", "minimum": 0, "maximum": 153}, "maximum": {"type": "integer", "minimum": 0, "maximum": 153}, "scheduled_days": {"const": 153}, "complete_days": {"type": "integer"}, "unknown_days": {"type": "integer"}, "minimum_yes": {"type": "integer", "minimum": 0, "maximum": 10}, "maximum_yes": {"type": "integer", "minimum": 0, "maximum": 10}, "minimum_payout_percent": {"type": "integer"}, "maximum_payout_percent": {"type": "integer"}, "source": {"type": "string"}, "history_status": {"type": "string"}}, "additionalProperties": false}},
    "additionalProperties": false
  }
}
