{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "columnConfigs": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "formatter": {
                        "type": "object",
                        "properties": {
                            "format": {
                                "type": "string"
                            },
                            "scale": {
                                "type": "number"
                            },
                            "chartType": {
                                "type": "string"
                            }
                        }
                    },
                    "displayName": {
                        "type": "string"
                    },
                    "columnId": {
                        "type": "string"
                    },
                    "columnType": {
                        "type": "string"
                    }
                },
                "required": [
                    "columnId",
                    "columnType"
                ]
            }
        },
        "config": {
            "type": "object",
            "properties": {
                "chartType": {
                    "type": "string"
                }
            },
            "required": [
                "chartType"
            ]
        },
        "model": {
            "type": "object",
            "properties": {
                "columns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "datasets": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "filters": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "column": {
                                "type": "string"
                            },
                            "exposed": {
                                "type": "integer",
                                "default": 0
                            },
                            "name": {
                                "type": "string"
                            },
                            "value": {
                                "type": "array",
                                "items": {
                                    "oneOf": [
                                        {
                                            "type": "string"
                                        },
                                        {
                                            "type": "number"
                                        },
                                        {
                                            "type": "null"
                                        }
                                    ]
                                }
                            },
                            "operator": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "column",
                            "exposed",
                            "name"
                        ]
                    }
                },
                "orderBy": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "column": {
                                "type": "string"
                            },
                            "order": {
                                "type": "string",
                                "default": "asc"
                            }
                        },
                        "required": [
                            "id",
                            "column",
                            "order"
                        ]
                    }
                },
                "limit": {
                    "type": "integer"
                },
                "offset": {
                    "type": "integer"
                },
                "columnOrder": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "visual": {
            "type": "object",
            "properties": {
                "series": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "columnId": {
                                "type": "string"
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "displayDataLabels": {
                                        "type": "boolean",
                                        "default": true
                                    },
                                    "displayTitle": {
                                        "type": "boolean",
                                        "default": true
                                    },
                                    "displayMarkers": {
                                        "type": "boolean",
                                        "default": true
                                    },
                                    "title": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "displayDataLabels",
                                    "displayTitle",
                                    "displayMarkers"
                                ]
                            },
                            "colorScheme": {
                                "type": "string"
                            },
                            "color": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "columnId"
                        ]
                    }
                },
                "traffic": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {}
                    }
                },
                "displayChartTitle": {
                    "type": "boolean",
                    "default": true
                },
                "displayReportMenu": {
                    "type": "boolean",
                    "default": true
                },
                "displayBorder": {
                    "type": "boolean",
                    "default": false
                },
                "displayLegend": {
                    "type": "boolean",
                    "default": false
                },
                "stack": {
                    "type": "boolean",
                    "default": false
                },
                "displaySeries": {
                    "type": "boolean",
                    "default": false
                },
                "displayGridLines": {
                    "type": "boolean",
                    "default": true
                },
                "displayTooltip": {
                    "type": "boolean",
                    "default": true
                },
                "displayXAxisTitle": {
                    "type": "boolean",
                    "default": true
                },
                "labelRotation": {
                    "type": "integer",
                    "enum": [
                        -90,
                        -45,
                        0,
                        45,
                        90
                    ],
                    "default": -45
                },
                "displayXAxisTitleValue": {
                    "type": "string"
                },
                "fontSize": {
                    "type": "string",
                    "default": "Medium"
                },
                "targetLine": {
                    "type": "boolean",
                    "default": false
                },
                "targetLineValue": {
                    "type": "number"
                },
                "targetLineColor": {
                    "type": "string",
                    "format": "color"
                },
                "minNumericSpan": {
                    "type": "string",
                    "default": "Auto"
                },
                "tickInterval": {
                    "type": "string",
                    "default": "auto"
                },
                "tickIntervalValue": {
                    "type": "string"
                }
            },
            "required": [
                "displayChartTitle",
                "displayReportMenu"
            ]
        }
    },
    "required": [
        "columnConfigs",
        "config",
        "model",
        "visual"
    ]
}