{
  "RULE_EXPRESSION": {
    "oneOf": [
      {
        "$ref": "#/$defs/global.genesis.criteria.model.RuleExpression"
      },
      {
        "type": "null"
      }
    ]
  },
  "RESULT_EXPRESSION": {
    "$ref": "#/$defs/global.genesis.criteria.model.ResultExpression"
  },
  "$defs": {
    "global.genesis.criteria.model.ResultExpression": {
      "properties": {
        "ASSIGNMENTS": {
          "items": {
            "$ref": "#/$defs/global.genesis.criteria.model.Assignment"
          },
          "uniqueItems": false,
          "readOnly": false,
          "description": "kotlin.collections.List",
          "type": "array"
        }
      },
      "required": ["ASSIGNMENTS"],
      "description": "global.genesis.criteria.model.ResultExpression",
      "type": "object"
    },
    "global.genesis.criteria.model.Assignment": {
      "properties": {
        "FIELD": {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.Field"
        },
        "VALUE": {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression"
        }
      },
      "required": ["FIELD", "VALUE"],
      "description": "global.genesis.criteria.model.Assignment",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.SingleExpression.Field": {
      "properties": {
        "NAME": {
          "readOnly": false,
          "description": "kotlin.String",
          "type": "string"
        },
        "TYPE": {
          "readOnly": false,
          "const": "FIELD",
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": ["NAME"],
      "description": "global.genesis.criteria.model.Expression.SingleExpression.Field",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression": {
      "oneOf": [
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.BinaryExpression"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.MethodExpression"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.PredicateExpression"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.BooleanValue"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.Field"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.NullValue"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.NumericValue"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.PlaceHolder"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.StringValue"
        }
      ],
      "description": "global.genesis.criteria.model.Expression"
    },
    "global.genesis.criteria.model.Expression.BinaryExpression": {
      "properties": {
        "LEFT": {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression"
        },
        "OPERATION": {
          "readOnly": false,
          "enum": [
            "GREATER_THAN",
            "LESS_THAN",
            "GREATER_THAN_OR_EQUAL",
            "LESS_THAN_OR_EQUAL",
            "EQUALS",
            "NOT_EQUALS",
            "AND",
            "OR",
            "PLUS",
            "MINUS",
            "MULTIPLY",
            "DIVIDE",
            "BITWISE_AND",
            "BITWISE_OR",
            "ASSIGNMENT"
          ],
          "description": "global.genesis.criteria.model.Operation",
          "type": "string"
        },
        "RIGHT": {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression"
        },
        "TYPE": {
          "readOnly": false,
          "const": "BINARY_EXPRESSION",
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": ["LEFT", "OPERATION", "RIGHT"],
      "description": "global.genesis.criteria.model.Expression.BinaryExpression",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.MethodExpression": {
      "properties": {
        "METHOD": {
          "readOnly": false,
          "enum": [
            "CONTAINS_IGNORE_CASE",
            "CONTAINS_WORDS_STARTING_WITH_IGNORE_CASE",
            "IS_NULL_OR_BLANK",
            "NOT_NULL_OR_BLANK",
            "LONG_TO_DATE",
            "LONG_TO_DATE_TIME",
            "DATE_TIME_IS_IN_RANGE"
          ],
          "description": "global.genesis.criteria.model.MethodCall",
          "type": "string"
        },
        "PARAMETERS": {
          "items": {
            "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression"
          },
          "uniqueItems": false,
          "readOnly": false,
          "description": "kotlin.collections.List",
          "type": "array"
        },
        "TYPE": {
          "readOnly": false,
          "const": "METHOD_EXPRESSION",
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": ["METHOD", "PARAMETERS"],
      "description": "global.genesis.criteria.model.Expression.MethodExpression",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.SingleExpression": {
      "oneOf": [
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.BooleanValue"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.Field"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.NullValue"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.NumericValue"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.PlaceHolder"
        },
        {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression.StringValue"
        }
      ],
      "description": "global.genesis.criteria.model.Expression.SingleExpression"
    },
    "global.genesis.criteria.model.Expression.SingleExpression.BooleanValue": {
      "properties": {
        "TYPE": {
          "readOnly": false,
          "const": "BOOLEAN",
          "description": "kotlin.String",
          "type": "string"
        },
        "VALUE": {
          "readOnly": false,
          "description": "kotlin.Boolean",
          "type": "boolean"
        }
      },
      "required": ["VALUE"],
      "description": "global.genesis.criteria.model.Expression.SingleExpression.BooleanValue",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.SingleExpression.NullValue": {
      "properties": {
        "TYPE": {
          "readOnly": false,
          "const": "NULL",
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": [],
      "description": "global.genesis.criteria.model.Expression.SingleExpression.NullValue",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.SingleExpression.NumericValue": {
      "properties": {
        "TYPE": {
          "readOnly": false,
          "const": "NUMBER",
          "description": "kotlin.String",
          "type": "string"
        },
        "VALUE": {
          "pattern": "[0-9]+(\\.[0-9]+)?",
          "readOnly": false,
          "description": "java.math.BigDecimal",
          "type": "string"
        }
      },
      "required": ["VALUE"],
      "description": "global.genesis.criteria.model.Expression.SingleExpression.NumericValue",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.SingleExpression.PlaceHolder": {
      "properties": {
        "KEY": {
          "readOnly": false,
          "description": "kotlin.String",
          "type": "string"
        },
        "TYPE": {
          "readOnly": false,
          "const": "PLACEHOLDER",
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": ["KEY"],
      "description": "global.genesis.criteria.model.Expression.SingleExpression.PlaceHolder",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.SingleExpression.StringValue": {
      "properties": {
        "TYPE": {
          "readOnly": false,
          "const": "STRING",
          "description": "kotlin.String",
          "type": "string"
        },
        "VALUE": {
          "readOnly": false,
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": ["VALUE"],
      "description": "global.genesis.criteria.model.Expression.SingleExpression.StringValue",
      "type": "object"
    },
    "global.genesis.criteria.model.Expression.PredicateExpression": {
      "properties": {
        "EXPRESSIONS": {
          "items": {
            "$ref": "#/$defs/global.genesis.criteria.model.Expression"
          },
          "uniqueItems": false,
          "readOnly": false,
          "description": "kotlin.collections.List",
          "type": "array"
        },
        "OPERATION": {
          "readOnly": false,
          "enum": ["AND", "OR"],
          "description": "global.genesis.criteria.model.LogicalOperation",
          "default": "AND",
          "type": "string"
        },
        "TYPE": {
          "readOnly": false,
          "const": "PREDICATE_EXPRESSION",
          "description": "kotlin.String",
          "type": "string"
        }
      },
      "required": [],
      "description": "global.genesis.criteria.model.Expression.PredicateExpression",
      "type": "object"
    },
    "global.genesis.criteria.model.RuleExpression": {
      "properties": {
        "CONDITIONS": {
          "items": {
            "$ref": "#/$defs/global.genesis.criteria.model.Condition"
          },
          "uniqueItems": false,
          "readOnly": false,
          "description": "kotlin.collections.List",
          "type": "array"
        }
      },
      "required": ["CONDITIONS"],
      "description": "global.genesis.criteria.model.RuleExpression",
      "type": "object"
    },
    "global.genesis.criteria.model.Condition": {
      "properties": {
        "LEFT": {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression.SingleExpression"
        },
        "OPERATION": {
          "readOnly": false,
          "enum": [
            "GREATER_THAN",
            "LESS_THAN",
            "GREATER_THAN_OR_EQUAL",
            "LESS_THAN_OR_EQUAL",
            "EQUALS",
            "NOT_EQUALS",
            "AND",
            "OR",
            "PLUS",
            "MINUS",
            "MULTIPLY",
            "DIVIDE",
            "BITWISE_AND",
            "BITWISE_OR",
            "ASSIGNMENT"
          ],
          "description": "global.genesis.criteria.model.Operation",
          "type": "string"
        },
        "RIGHT": {
          "$ref": "#/$defs/global.genesis.criteria.model.Expression"
        }
      },
      "required": ["LEFT", "OPERATION", "RIGHT"],
      "description": "global.genesis.criteria.model.Condition",
      "type": "object"
    }
  }
}
