{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://github.com/your-org/project-a16/schemas/molecule_schema.json",
  "title": "Molecule JSON Schema",
  "description": "Схема для файлов молекул, используемых в программе. Содержит информацию об атомах, связях и SMILES-представлении молекулы.",
  "type": "object",
  "required": ["schema_version", "atoms", "bonds"],
  "properties": {
    "schema_version": {
      "type": "string",
      "description": "Версия схемы формата файла молекулы",
      "pattern": "^\\d+\\.\\d+$"
    },
    "smiles": {
      "type": "string",
      "description": "SMILES-представление молекулы (для удобства отладки)",
      "pattern": "^[A-Za-z0-9@+\\-\\[\\]\\(\\)\\=#$\\\\/.]*$"
    },
    "readable_name": {
      "type": "string",
      "description": "Читаемое название молекулы (например, 'TNT', 'HNB')"
    },
    "table_density": {
      "type": "number",
      "description": "Табличное значение плотности (г/см³)",
      "format": "float",
      "minimum": 0
    },
    "table_cr1": {
      "type": "number",
      "description": "Табличное значение формулы CandyRed CR-1",
      "format": "float"
    },
    "star": {
      "type": "number",
      "description": "Значение формулы STAR",
      "format": "float"
    },
    "star2": {
      "type": "number",
      "description": "Значение формулы STAR2 (STAR умноженное на молярную массу и делённое на 1000)",
      "format": "float"
    },
    "keat": {
      "type": "number",
      "description": "Значение формулы KEAT",
      "format": "float"
    },
    "bert": {
      "type": "number",
      "description": "Значение формулы BERT",
      "format": "float"
    },
    "dash": {
      "type": "number",
      "description": "Значение формулы DASH",
      "format": "float"
    },
    "atoms": {
      "type": "array",
      "description": "Массив атомов молекулы",
      "items": {
        "type": "object",
        "required": ["id", "element", "formal_charge", "x", "y"],
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор атома",
            "minimum": 1
          },
          "element": {
            "type": "string",
            "description": "Символ химического элемента (например, C, H, O, N)",
            "pattern": "^[A-Z][a-z]?$"
          },
          "formal_charge": {
            "type": "integer",
            "description": "Формальный заряд атома",
            "minimum": -3,
            "maximum": 3
          },
          "x": {
            "type": "number",
            "description": "Координата X атома на холсте (для отображения в GUI)",
            "format": "float"
          },
          "y": {
            "type": "number",
            "description": "Координата Y атома на холсте (для отображения в GUI)",
            "format": "float"
          }
        }
      },
      "minItems": 1
    },
    "bonds": {
      "type": "array",
      "description": "Массив связей между атомами",
      "items": {
        "type": "object",
        "required": ["atom_a", "atom_b", "order"],
        "properties": {
          "atom_a": {
            "type": "integer",
            "description": "Идентификатор первого атома связи",
            "minimum": 1
          },
          "atom_b": {
            "type": "integer",
            "description": "Идентификатор второго атома связи",
            "minimum": 1
          },
          "order": {
            "type": "integer",
            "description": "Порядок связи (1 - одинарная, 2 - двойная, 3 - тройная)",
            "minimum": 1,
            "maximum": 3
          }
        }
      }
    }
  },
  "additionalProperties": false
}
