{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Warehouse pivot map",
  "description": "Per-domain shape descriptors for mcps_consolidated.parquet: eav domains need the record_id pivot in example_sql, flat domains are one fact per row.",
  "type": "object",
  "additionalProperties": false,
  "required": ["_about", "source", "n_domains", "eav_domains", "flat_domains", "domains"],
  "properties": {
    "_about": {"type": "string"},
    "source": {"type": "string"},
    "n_domains": {"type": "integer", "minimum": 1},
    "eav_domains": {"type": "array", "items": {"type": "string"}},
    "flat_domains": {"type": "array", "items": {"type": "string"}},
    "domains": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false,
        "required": ["kind", "row_count", "grain", "years", "id_columns",
                     "dimension_metrics", "fact_metrics", "example_sql"],
        "properties": {
          "kind": {"enum": ["eav", "flat"]},
          "row_count": {"type": "integer", "minimum": 1},
          "grain": {"type": "string"},
          "years": {"type": "array", "items": {"type": "integer"}},
          "id_columns": {"type": "array", "items": {"type": "string"}},
          "dimension_metrics": {"type": "array", "items": {"type": "string"}},
          "fact_metrics": {
            "type": "object",
            "additionalProperties": {"type": "number", "minimum": 0, "maximum": 1}
          },
          "n_shapes": {"type": "integer", "minimum": 1},
          "dimension_year_gaps": {
            "type": "object",
            "additionalProperties": {"type": "array", "items": {"type": "integer"}}
          },
          "gap_note": {"type": "string"},
          "example_sql": {"type": "string"}
        },
        "if": {"properties": {"kind": {"const": "eav"}}},
        "then": {"required": ["n_shapes"]}
      }
    }
  }
}
