{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://makebuildingpro.com/schema/v2.0",
  "title": "MakeBuilding Pro Data Schema",
  "description": "Schema for verifying MakeBuilding Pro architectural data structure.",
  "type": "object",
  "required": [
    "version",
    "metadata",
    "global",
    "grids",
    "levels",
    "catalog",
    "layout_column",
    "layout_mainbeam",
    "layout_secondarybeam",
    "layout_wall",
    "layout_slab",
    "layout_cantileverbeam",
    "layout_cantileverslab",
    "layout_brace",
    "structural_plan"
  ],
  "properties": {
    "$schema": {
      "type": "string",
      "format": "uri"
    },
    "version": {
      "type": "string",
      "default": "1.0"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "createdAt": { "type": "string", "format": "date-time" },
        "modifiedAt": { "type": "string", "format": "date-time" },
        "application": { "type": "string" },
        "applicationVersion": { "type": "string" }
      }
    },
    "global": {
      "type": "object",
      "required": ["unitSystem"],
      "properties": {
        "origin_X": { "type": "number", "default": 0 },
        "origin_Y": { "type": "number", "default": 0 },
        "unitSystem": {
          "type": "string",
          "enum": ["metric", "imperial"],
          "default": "metric"
        }
      }
    },
    "grids": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["axis", "label", "distance"],
        "properties": {
          "axis": { "type": "string", "enum": ["X", "Y"] },
          "label": { "type": "string" },
          "distance": { "type": "number" }
        }
      }
    },
    "levels": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["name", "distance"],
        "properties": {
          "name": { "type": "string" },
          "label": { "type": "string" },
          "distance": { "type": "number" }
        }
      }
    },
    "catalog": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["type_ID", "category", "width", "depth"],
        "properties": {
          "type_ID": { "type": "string" },
          "category": {
            "type": "string",
            "enum": ["Column", "Beam", "Wall", "Slab", "Brace"]
          },
          "shape_Type": { "type": "string", "default": "Rect" },
          "width": { "type": "number" },
          "depth": { "type": "number" },
          "material": { "type": "string" },
          "revit_Family": { "type": "string" }
        }
      }
    },
    "layout_column": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "grid_Intersection", "type_ID"],
        "properties": {
          "floor": { "type": "string" },
          "grid_Intersection": { "type": "string", "description": "Format: X#-Y#" },
          "type_ID": { "type": "string" },
          "rotation": { "type": "number" },
          "offset_X": { "type": "number" },
          "offset_Y": { "type": "number" },
          "offset_Base": { "type": "number" },
          "offset_Top": { "type": "number" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "layout_mainbeam": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "start_Grid", "end_Grid", "type_ID"],
        "properties": {
          "floor": { "type": "string" },
          "start_Grid": { "type": "string" },
          "end_Grid": { "type": "string" },
          "type_ID": { "type": "string" },
          "offset_Start_X": { "type": "number" },
          "offset_Start_Y": { "type": "number" },
          "offset_Start_Z": { "type": "number" },
          "offset_End_X": { "type": "number" },
          "offset_End_Y": { "type": "number" },
          "offset_End_Z": { "type": "number" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "layout_secondarybeam": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "area_Code", "direction", "division", "type_ID"],
        "properties": {
          "floor": { "type": "string" },
          "area_Code": { "type": "string" },
          "type_ID": { "type": "string" },
          "direction": { "type": "string", "enum": ["X", "Y"] },
          "division": { "type": "integer", "minimum": 1 },
          "offset_Start_Z": { "type": "number" },
          "offset_End_Z": { "type": "number" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "layout_wall": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "start_Grid", "end_Grid", "type_ID"],
        "properties": {
          "floor": { "type": "string" },
          "start_Grid": { "type": "string" },
          "end_Grid": { "type": "string" },
          "type_ID": { "type": "string" },
          "width": { "type": "number" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "layout_slab": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "area_Code", "type_ID"],
        "properties": {
          "floor": { "type": "string" },
          "area_Code": { "type": "string" },
          "type_ID": { "type": "string" },
          "offset_Z": { "type": "number" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "layout_cantileverbeam": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "base_Grid", "direction", "length", "type_ID"],
        "properties": {
          "floor": { "type": "string" },
          "type": { "type": "string", "enum": ["Beam", "BeamNose"] },
          "base_Grid": { "type": "string" },
          "direction": { "type": "string", "enum": ["X+", "X-", "Y+", "Y-"] },
          "length": { "type": "number" },
          "type_ID": { "type": "string" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "layout_cantileverslab": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "layout_brace": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["floor", "start_Grid", "end_Grid", "type_ID", "type"],
        "properties": {
          "floor": { "type": "string" },
          "start_Grid": { "type": "string" },
          "end_Grid": { "type": "string" },
          "type_ID": { "type": "string" },
          "type": { "type": "string", "enum": ["Single", "Double"] },
          "offset_Start_X": { "type": "number" },
          "offset_Start_Y": { "type": "number" },
          "offset_Start_Z": { "type": "number" },
          "offset_End_X": { "type": "number" },
          "offset_End_Y": { "type": "number" },
          "offset_End_Z": { "type": "number" },
          "is_Void": { "type": "boolean" }
        }
      }
    },
    "structural_plan": {
      "type": "object",
      "description": "Settings for 2D drawing generation.",
      "required": [
        "text_Height_Grid",
        "text_Height_Member",
        "text_Offset_Beam",
        "line_Weight_Grid",
        "line_Weight_Column",
        "line_Weight_Beam",
        "line_Weight_Brace",
        "line_Weight_Slab",
        "dimension_Text_Height",
        "dimension_Arrow_Size",
        "dimension_Extension",
        "dimension_Offset",
        "brace_Line_Offset",
        "grid_Extension_Start",
        "grid_Extension_End",
        "grid_Balloon_Offset_Base",
        "dimension_Gap_Y1",
        "dimension_Gap_Y2",
        "dimension_Gap_X1",
        "dimension_Gap_X2",
        "dimension_Base_Offset_Y",
        "dimension_Base_Offset_X",
        "label_Offset_Column"
      ],
      "properties": {
        "text_Height_Grid": { "type": "number" },
        "text_Height_Member": { "type": "number" },
        "text_Offset_Beam": { "type": "number" },
        "line_Weight_Grid": { "type": "number" },
        "line_Weight_Column": { "type": "number" },
        "line_Weight_Beam": { "type": "number" },
        "line_Weight_Brace": { "type": "number" },
        "line_Weight_Slab": { "type": "number" },
        "dimension_Text_Height": { "type": "number" },
        "dimension_Arrow_Size": { "type": "number" },
        "dimension_Extension": { "type": "number" },
        "dimension_Offset": { "type": "number" },
        "brace_Line_Offset": { "type": "number" },
        "grid_Extension_Start": { "type": "number" },
        "grid_Extension_End": { "type": "number" },
        "grid_Balloon_Offset_Base": { "type": "number" },
        "dimension_Gap_Y1": { "type": "number" },
        "dimension_Gap_Y2": { "type": "number" },
        "dimension_Gap_X1": { "type": "number" },
        "dimension_Gap_X2": { "type": "number" },
        "dimension_Base_Offset_Y": { "type": "number" },
        "dimension_Base_Offset_X": { "type": "number" },
        "label_Offset_Column": { "type": "number" }
      },
      "additionalProperties": false
    }
  }
}