{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {
        "positiveNumber": {
            "type": "number",
            "minimum": 0
        },
        "channels": {
            "enum": [
                1,
                8
            ]
        },
        "displayCategory": {
            "type": "string",
            "enum": [
                "GEN1",
                "GEN2"
            ]
        }
    },
    "description": "Model-level pipette specifications. These do not vary across different versions of the same model",
    "type": "object",
    "$comment": "Example key: 'p10_single'",
    "patternProperties": {
        ".*": {
            "type": "object",
            "required": [
                "channels",
                "displayName",
                "defaultAspirateFlowRate",
                "defaultDispenseFlowRate",
                "defaultBlowOutFlowRate",
                "maxVolume",
                "minVolume"
            ],
            "additionalProperties": false,
            "properties": {
                "channels": {
                    "$ref": "#/definitions/channels"
                },
                "defaultAspirateFlowRate": {
                    "value": {
                        "$ref": "#/definitions/positiveNumber"
                    },
                    "min": {
                        "$ref": "#/definitions/positiveNumber"
                    },
                    "max": {
                        "$ref": "#/definitions/positiveNumber"
                    }
                },
                "defaultDispenseFlowRate": {
                    "value": {
                        "$ref": "#/definitions/positiveNumber"
                    },
                    "min": {
                        "$ref": "#/definitions/positiveNumber"
                    },
                    "max": {
                        "$ref": "#/definitions/positiveNumber"
                    }
                },
                "defaultBlowOutFlowRate": {
                    "value": {
                        "$ref": "#/definitions/positiveNumber"
                    },
                    "min": {
                        "$ref": "#/definitions/positiveNumber"
                    },
                    "max": {
                        "$ref": "#/definitions/positiveNumber"
                    }
                },
                "displayName": {
                    "type": "string"
                },
                "displayCategory": {
                    "$ref": "#/definitions/displayCategory"
                },
                "maxVolume": {
                    "$ref": "#/definitions/positiveNumber"
                },
                "minVolume": {
                    "$ref": "#/definitions/positiveNumber"
                },
                "smoothieConfigs": {
                    "type": "object",
                    "description": "Runtime smoothie configs per pipette type",
                    "properties": {
                        "stepsPerMM": {
                            "type": "number"
                        },
                        "homePosition": {
                            "type": "number"
                        },
                        "travelDistance": {
                            "type": "number"
                        }
                    }
                }
            }
        }
    }
}