Skip to main content

JSON Schemas

JSON Schema documents associated with ECaaS conform to the Draft 2020-12 specification of JSON Schema. The OpenAPI 3.1 definition for the API embeds these documents directly without further transformation, so an alternative view for the following schema definitions can be found within the relevant parts of the API documentation.

The following is the current JSON schema representing an input for an FHS calculation (download):

{
  "$defs": {
    "AirTerminalDevice": {
      "additionalProperties": false,
      "properties": {
        "area_cm2": {
          "format": "double",
          "type": "number"
        },
        "pressure_difference_ref": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "area_cm2",
        "pressure_difference_ref"
      ],
      "type": "object"
    },
    "Appliance": {
      "additionalProperties": false,
      "properties": {
        "Energysupply": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "kWh_per_100cycle": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "kWh_per_annum": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "kWh_per_cycle": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "kg_load": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "loadshifting": {
          "anyOf": [
            {
              "$ref": "#/$defs/ApplianceLoadShifting"
            },
            {
              "type": "null"
            }
          ]
        },
        "standard_use": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        }
      },
      "type": "object"
    },
    "ApplianceEntry": {
      "anyOf": [
        {
          "$ref": "#/$defs/Appliance"
        },
        {
          "$ref": "#/$defs/ApplianceReference"
        }
      ]
    },
    "ApplianceGainsDetails": {
      "additionalProperties": false,
      "properties": {
        "EnergySupply": {
          "type": "string"
        },
        "Events": {
          "description": "List of appliance usage events",
          "items": {
            "$ref": "#/$defs/ApplianceGainsDetailsEvent"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "Standby": {
          "description": "Appliance power consumption when not in use (unit: W)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "gains_fraction": {
          "description": "Proportion of appliance demand turned into heat gains (no unit)",
          "format": "double",
          "type": "number"
        },
        "loadshifting": {
          "anyOf": [
            {
              "$ref": "#/$defs/ApplianceLoadShifting"
            },
            {
              "type": "null"
            }
          ]
        },
        "priority": {
          "type": [
            "integer",
            "null"
          ]
        },
        "schedule": {
          "anyOf": [
            {
              "$ref": "#/$defs/Schedule_for_double"
            },
            {
              "type": "null"
            }
          ]
        },
        "start_day": {
          "description": "First day of the time series, day of the year, 0 to 365",
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "time_series_step": {
          "description": "Timestep of the time series data (unit: hours)",
          "format": "double",
          "type": "number"
        },
        "type": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "EnergySupply",
        "gains_fraction",
        "start_day",
        "time_series_step"
      ],
      "type": "object"
    },
    "ApplianceGainsDetailsEvent": {
      "additionalProperties": false,
      "properties": {
        "demand_W": {
          "format": "double",
          "type": "number"
        },
        "duration": {
          "format": "double",
          "type": "number"
        },
        "start": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "demand_W",
        "duration",
        "start"
      ],
      "type": "object"
    },
    "ApplianceKey": {
      "enum": [
        "Clothes_drying",
        "Clothes_washing",
        "Dishwasher",
        "Fridge",
        "Fridge-Freezer",
        "Freezer",
        "Hobs",
        "Kettle",
        "Microwave",
        "Otherdevices",
        "Oven",
        "lighting"
      ],
      "type": "string"
    },
    "ApplianceLoadShifting": {
      "additionalProperties": false,
      "properties": {
        "Control": {
          "type": "string"
        },
        "demand_limit_weighted": {
          "format": "double",
          "type": "number"
        },
        "demand_timeseries": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "max_shift_hrs": {
          "format": "double",
          "type": "number"
        },
        "priority": {
          "type": [
            "integer",
            "null"
          ]
        },
        "weight": {
          "const": "Tariff",
          "type": "string"
        },
        "weight_timeseries": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        }
      },
      "required": [
        "demand_limit_weighted",
        "max_shift_hrs"
      ],
      "type": "object"
    },
    "ApplianceReference": {
      "enum": [
        "Default",
        "Not Installed"
      ],
      "type": "string"
    },
    "BathDetails": {
      "additionalProperties": false,
      "properties": {
        "ColdWaterSource": {
          "$ref": "#/$defs/ColdWaterSourceType"
        },
        "flowrate": {
          "description": "Tap/outlet flow rate (unit: litre/minute)",
          "format": "double",
          "type": "number"
        },
        "size": {
          "description": "Volume held by bath (unit: litre)",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "ColdWaterSource",
        "flowrate",
        "size"
      ],
      "type": "object"
    },
    "Baths": {
      "additionalProperties": {
        "$ref": "#/$defs/BathDetails"
      },
      "type": "object"
    },
    "BatteryLocation": {
      "enum": [
        "inside",
        "outside"
      ],
      "type": "string"
    },
    "BoilerCostScheduleHybrid": {
      "additionalProperties": false,
      "properties": {
        "cost_schedule_boiler": {
          "$ref": "#/$defs/Schedule_for_double"
        },
        "cost_schedule_hp": {
          "$ref": "#/$defs/Schedule_for_double"
        },
        "cost_schedule_start_day": {
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "cost_schedule_time_series_step": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "cost_schedule_boiler",
        "cost_schedule_hp",
        "cost_schedule_start_day",
        "cost_schedule_time_series_step"
      ],
      "type": "object"
    },
    "BoilerHotWaterTest": {
      "enum": [
        "M&L",
        "M&S",
        "M_only",
        "No_additional_tests"
      ],
      "type": "string"
    },
    "BuildType": {
      "enum": [
        "house",
        "flat"
      ],
      "type": "string"
    },
    "BuildingElement": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "area": {
              "description": "Net area of the opaque building element (i.e. minus any windows / doors / etc.) (unit: m²)",
              "format": "double",
              "type": "number"
            },
            "areal_heat_capacity": {
              "description": "Areal heat capacity (unit: J/m².K)",
              "format": "double",
              "type": "number"
            },
            "base_height": {
              "description": "The distance between the ground and the lowest edge of the element (unit: m)",
              "format": "double",
              "type": "number"
            },
            "h_ce": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "h_ci": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "h_re": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "h_ri": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "height": {
              "description": "The height of the building element (unit: m)",
              "format": "double",
              "type": "number"
            },
            "is_external_door": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "is_unheated_pitched_roof": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "mass_distribution_class": {
              "$ref": "#/$defs/MassDistributionClass"
            },
            "orientation360": {
              "description": "The orientation angle of the inclined surface, expressed as the geographical azimuth angle of the horizontal projection of the inclined surface normal, 0 to 360 (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "pitch": {
              "description": "Tilt angle of the surface from horizontal, between 0 and 180, where 0 means the external surface is facing up, 90 means the external surface is vertical and 180 means the external surface is facing down (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "solar_absorption_coeff": {
              "description": "Solar absorption coefficient at the external surface (dimensionless)",
              "format": "double",
              "type": "number"
            },
            "thermal_resistance_construction": {
              "description": "Thermal resistance (unit: m².K/W)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "BuildingElementOpaque",
              "type": "string"
            },
            "u_value": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "width": {
              "description": "The width of the building element (unit: m)",
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "solar_absorption_coeff",
            "area",
            "areal_heat_capacity",
            "base_height",
            "height",
            "mass_distribution_class",
            "orientation360",
            "pitch",
            "type",
            "width"
          ],
          "title": "BuildingElementOpaque",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Control_WindowOpenable": {
              "type": [
                "string",
                "null"
              ]
            },
            "area": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "base_height": {
              "description": "The distance between the ground and the lowest edge of the element (unit: m)",
              "format": "double",
              "type": "number"
            },
            "frame_area_fraction": {
              "description": "The frame area fraction of window, ratio of the projected frame area to the overall projected area of the glazed element of the window",
              "format": "double",
              "type": "number"
            },
            "free_area_height": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "g_value": {
              "description": "Total solar energy transmittance of the transparent part of the window",
              "format": "double",
              "type": "number"
            },
            "height": {
              "description": "The height of the building element (unit: m)",
              "format": "double",
              "type": "number"
            },
            "max_window_open_area": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "mid_height": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "orientation360": {
              "description": "The orientation angle of the inclined surface, expressed as the geographical azimuth angle of the horizontal projection of the inclined surface normal, 0 to 360 (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "pitch": {
              "description": "Tilt angle of the surface from horizontal, between 0 and 180, where 0 means the external surface is facing up, 90 means the external surface is vertical and 180 means the external surface is facing down (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "security_risk": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "shading": {
              "items": {
                "$ref": "#/$defs/WindowShadingObject"
              },
              "type": "array"
            },
            "thermal_resistance_construction": {
              "description": "Thermal resistance (unit: m².K/W)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "treatment": {
              "anyOf": [
                {
                  "items": {
                    "$ref": "#/$defs/WindowTreatment"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ]
            },
            "type": {
              "const": "BuildingElementTransparent",
              "type": "string"
            },
            "u_value": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "width": {
              "description": "The width of the building element (unit: m)",
              "format": "double",
              "type": "number"
            },
            "window_part_list": {
              "items": {
                "$ref": "#/$defs/WindowPart"
              },
              "type": [
                "array",
                "null"
              ]
            }
          },
          "required": [
            "base_height",
            "frame_area_fraction",
            "g_value",
            "height",
            "orientation360",
            "pitch",
            "shading",
            "type",
            "width"
          ],
          "title": "BuildingElementTransparent",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "area": {
              "description": "Area of this building element within the zone (unit: m²)",
              "format": "double",
              "type": "number"
            },
            "area_per_perimeter_vent": {
              "description": "Area of ventilation openings per perimeter (unit: m²/m)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "areal_heat_capacity": {
              "description": "Areal heat capacity of the ground floor element (unit: J/m2.K)",
              "format": "double",
              "type": "number"
            },
            "depth_basement_floor": {
              "description": "Depth of basement floor below ground level (unit: m)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "edge_insulation": {
              "items": {
                "$ref": "#/$defs/EdgeInsulation"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "floor_type": {
              "$ref": "#/$defs/FloorType"
            },
            "height_basement_walls": {
              "description": "Height of the basement walls above ground level (unit: m)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "height_upper_surface": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "mass_distribution_class": {
              "$ref": "#/$defs/MassDistributionClass"
            },
            "perimeter": {
              "description": "Perimeter of the floor; calculated for the entire ground floor, even if it is distributed among several zones (unit: m)",
              "format": "double",
              "type": "number"
            },
            "pitch": {
              "description": "Tilt angle of the surface from horizontal, between 0 and 180, where 0 means the external surface is facing up, 90 means the external surface is vertical and 180 means the external surface is facing down (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "psi_wall_floor_junc": {
              "description": "Linear thermal transmittance of the junction between the floor and the walls (unit: W/m.K)",
              "format": "double",
              "type": "number"
            },
            "shield_fact_location": {
              "anyOf": [
                {
                  "$ref": "#/$defs/WindShieldLocation"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Wind shielding factor"
            },
            "thermal_resist_insul": {
              "description": "Thermal resistance of insulation on base of underfloor space (unit: m².K/W)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thermal_resist_walls_base": {
              "description": "Thermal resistance of walls of the basement (unit: m².K/W)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thermal_resistance_floor_construction": {
              "description": "Total thermal resistance of all layers in the floor construction (unit: m².K/W)",
              "format": "double",
              "type": "number"
            },
            "thermal_transm_envi_base": {
              "description": "Thermal transmittance of floor above basement (unit: W/m².K)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thermal_transm_walls": {
              "description": "Thermal transmittance of walls above ground (unit: W/m².K)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thickness_walls": {
              "description": "Thickness of the walls (unit: m)",
              "format": "double",
              "type": "number"
            },
            "total_area": {
              "description": "Total area of the building element across entire dwelling; if the Floor is divided among several zones, this is the total area across all zones (unit: m²)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "BuildingElementGround",
              "type": "string"
            },
            "u_value": {
              "description": "Steady-state thermal transmittance of floor, including the effect of the ground (calculated for the entire ground floor, even if it is distributed among several zones) (unit: W/m2.K)",
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "area",
            "areal_heat_capacity",
            "floor_type",
            "mass_distribution_class",
            "perimeter",
            "pitch",
            "psi_wall_floor_junc",
            "thermal_resistance_floor_construction",
            "thickness_walls",
            "total_area",
            "type",
            "u_value"
          ],
          "title": "BuildingElementGround",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "area": {
              "format": "double",
              "type": "number"
            },
            "areal_heat_capacity": {
              "description": "Areal heat capacity (unit: J/m².K)",
              "format": "double",
              "type": "number"
            },
            "mass_distribution_class": {
              "$ref": "#/$defs/MassDistributionClass"
            },
            "pitch": {
              "description": "Tilt angle of the surface from horizontal, between 0 and 180, where 0 means the external surface is facing up, 90 means the external surface is vertical and 180 means the external surface is facing down (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "thermal_resistance_construction": {
              "description": "Thermal resistance (unit: m².K/W)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "BuildingElementAdjacentConditionedSpace",
              "type": "string"
            },
            "u_value": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "area",
            "areal_heat_capacity",
            "mass_distribution_class",
            "pitch",
            "type"
          ],
          "title": "BuildingElementAdjacentConditionedSpace",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "area": {
              "description": "Area of this building element (unit: m²)",
              "format": "double",
              "type": "number"
            },
            "areal_heat_capacity": {
              "description": "Areal heat capacity (unit: J/m2.K)",
              "format": "double",
              "type": "number"
            },
            "mass_distribution_class": {
              "$ref": "#/$defs/MassDistributionClass"
            },
            "pitch": {
              "description": "Tilt angle of the surface from horizontal, between 0 and 180, where 0 means the external surface is facing up, 90 means the external surface is vertical and 180 means the external surface is facing down (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "thermal_resistance_construction": {
              "description": "Thermal resistance (unit: m2.K/W)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thermal_resistance_unconditioned_space": {
              "description": "Effective thermal resistance of unheated space (unit: m².K/W)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "BuildingElementAdjacentUnconditionedSpace_Simple",
              "type": "string"
            },
            "u_value": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "area",
            "areal_heat_capacity",
            "mass_distribution_class",
            "pitch",
            "thermal_resistance_unconditioned_space",
            "type"
          ],
          "title": "BuildingElementAdjacentUnconditionedSpace_Simple",
          "type": "object"
        }
      ]
    },
    "ChargeLevel": {
      "anyOf": [
        {
          "format": "double",
          "type": "number"
        },
        {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        {
          "$ref": "#/$defs/Schedule_for_double"
        }
      ]
    },
    "ColdWaterSourceDetails": {
      "additionalProperties": false,
      "properties": {
        "start_day": {
          "description": "First day of the time series, day of the year, 0 to 365",
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "temperatures": {
          "description": "List of cold water temperatures, one entry per hour (unit: ˚C)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "time_series_step": {
          "description": "Timestep of the time series data (unit: hours)",
          "format": "double",
          "type": "number"
        },
        "type": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "start_day",
        "temperatures",
        "time_series_step"
      ],
      "type": "object"
    },
    "ColdWaterSourceInput": {
      "additionalProperties": false,
      "properties": {
        "header tank": {
          "anyOf": [
            {
              "$ref": "#/$defs/ColdWaterSourceDetails"
            },
            {
              "type": "null"
            }
          ]
        },
        "mains water": {
          "anyOf": [
            {
              "$ref": "#/$defs/ColdWaterSourceDetails"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object"
    },
    "ColdWaterSourceType": {
      "enum": [
        "mains water",
        "header tank"
      ],
      "type": "string"
    },
    "CombustionAirSupplySituation": {
      "enum": [
        "room_air",
        "outside"
      ],
      "type": "string"
    },
    "CombustionAppliance": {
      "additionalProperties": false,
      "properties": {
        "appliance_type": {
          "$ref": "#/$defs/CombustionApplianceType"
        },
        "exhaust_situation": {
          "$ref": "#/$defs/FlueGasExhaustSituation"
        },
        "fuel_type": {
          "$ref": "#/$defs/CombustionFuelType"
        },
        "supply_situation": {
          "$ref": "#/$defs/CombustionAirSupplySituation"
        }
      },
      "required": [
        "appliance_type",
        "exhaust_situation",
        "fuel_type",
        "supply_situation"
      ],
      "type": "object"
    },
    "CombustionApplianceType": {
      "enum": [
        "open_fireplace",
        "closed_with_fan",
        "open_gas_flue_balancer",
        "open_gas_kitchen_stove",
        "open_gas_fire",
        "closed_fire"
      ],
      "type": "string"
    },
    "CombustionFuelType": {
      "enum": [
        "wood",
        "gas",
        "oil",
        "coal"
      ],
      "type": "string"
    },
    "Control": {
      "additionalProperties": {
        "$ref": "#/$defs/ControlDetails"
      },
      "type": "object"
    },
    "ControlCombination": {
      "additionalProperties": false,
      "properties": {
        "controls": {
          "items": {
            "type": "string"
          },
          "minItems": 2,
          "type": "array"
        },
        "operation": {
          "$ref": "#/$defs/ControlCombinationOperation"
        }
      },
      "required": [
        "controls",
        "operation"
      ],
      "type": "object"
    },
    "ControlCombinationOperation": {
      "enum": [
        "AND",
        "OR",
        "XOR",
        "NOT",
        "MAX",
        "MIN",
        "MEAN"
      ],
      "type": "string"
    },
    "ControlCombinations": {
      "additionalProperties": {
        "$ref": "#/$defs/ControlCombination"
      },
      "properties": {
        "main": {
          "$ref": "#/$defs/ControlCombination"
        }
      },
      "required": [
        "main"
      ],
      "type": "object"
    },
    "ControlDetails": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "allow_null": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "logic_type": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ControlLogicType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "schedule": {
              "$ref": "#/$defs/Schedule_for_Boolean",
              "description": "List of boolean values where true means on, one entry per hour"
            },
            "start_day": {
              "description": "First day of the time series, day of the year, 0 to 365",
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "time_series_step": {
              "description": "Timestep of the time series data (unit: hours)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "OnOffTimeControl",
              "type": "string"
            }
          },
          "required": [
            "schedule",
            "start_day",
            "time_series_step",
            "type"
          ],
          "title": "OnOffTimeControl",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "logic_type": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ControlLogicType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "schedule": {
              "$ref": "#/$defs/Schedule_for_double",
              "description": "List of cost values (one entry per time_series_step)"
            },
            "start_day": {
              "description": "First day of the time series, day of the year, 0 to 365",
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "time_on_daily": {
              "description": "Number of 'on' hours to be set per day",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "time_series_step": {
              "description": "Timestep of the time series data (unit: hours)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "OnOffCostMinimisingTimeControl",
              "type": "string"
            }
          },
          "required": [
            "schedule",
            "start_day",
            "time_series_step",
            "type"
          ],
          "title": "OnOffCostMinimisingTimeControl",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "advanced_start": {
              "description": "How long before heating period the system should switch on (unit: hours)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "default_to_max": {
              "description": "If both min and max limits are set but setpoint is not, whether to default to min (false) or max (true)",
              "type": [
                "boolean",
                "null"
              ]
            },
            "logic_type": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ControlLogicType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "schedule": {
              "$ref": "#/$defs/Schedule_for_double",
              "description": "List of temperature values, one entry per hour (unit: ˚C)"
            },
            "setpoint_max": {
              "description": "Maximum setpoint allowed (unit: ˚C)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "setpoint_min": {
              "description": "Minimum setpoint allowed (unit: ˚C)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "start_day": {
              "description": "First day of the time series, day of the year, 0 to 365",
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "time_series_step": {
              "description": "Timestep of the time series data (unit: hours)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "SetpointTimeControl",
              "type": "string"
            }
          },
          "required": [
            "schedule",
            "start_day",
            "time_series_step",
            "type"
          ],
          "title": "SetpointTimeControl",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "charge_level": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ChargeLevel"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Proportion of the charge targeted for each day"
            },
            "external_sensor": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ExternalSensor"
                },
                {
                  "type": "null"
                }
              ]
            },
            "full_charge_temp_diff": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "logic_type": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ControlLogicType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "min_target_charge_factor": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "schedule": {
              "$ref": "#/$defs/Schedule_for_Boolean",
              "description": "List of boolean values where true means 'on' (one entry per hour)"
            },
            "start_day": {
              "description": "First day of the time series, day of the year, 0 to 365",
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "target_charge": {
              "description": "(Ignored and likely not part of final specification)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "temp_charge_cut": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "temp_charge_cut_delta": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Schedule_for_double"
                },
                {
                  "type": "null"
                }
              ]
            },
            "time_series_step": {
              "description": "Timestep of the time series data (unit: hours)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "ChargeControl",
              "type": "string"
            }
          },
          "required": [
            "schedule",
            "start_day",
            "time_series_step",
            "type"
          ],
          "title": "ChargeControl",
          "type": "object"
        },
        {
          "properties": {
            "combination": {
              "$ref": "#/$defs/ControlCombinations"
            },
            "start_day": {
              "type": "integer"
            },
            "time_series_step": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "CombinationTimeControl",
              "type": "string"
            }
          },
          "required": [
            "combination",
            "start_day",
            "time_series_step"
          ],
          "title": "CombinationTimeControl",
          "type": "object"
        }
      ]
    },
    "ControlLogicType": {
      "enum": [
        "celect",
        "heat_battery",
        "hhrsh",
        "Automatic",
        "Manual"
      ],
      "type": "string"
    },
    "CustomEnergySourceFactor": {
      "additionalProperties": false,
      "properties": {
        "Emissions Factor kgCO2e/kWh": {
          "format": "double",
          "type": "number"
        },
        "Emissions Factor kgCO2e/kWh including out-of-scope emissions": {
          "format": "double",
          "type": "number"
        },
        "Primary Energy Factor kWh/kWh delivered": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "Emissions Factor kgCO2e/kWh",
        "Emissions Factor kgCO2e/kWh including out-of-scope emissions",
        "Primary Energy Factor kWh/kWh delivered"
      ],
      "type": "object"
    },
    "DaylightSavingsConfig": {
      "enum": [
        "applicable and taken into account",
        "applicable but not taken into account",
        "not applicable"
      ],
      "type": "string"
    },
    "DiverterHeatSourceType": {
      "enum": [
        "immersion"
      ],
      "type": "string"
    },
    "DuctShape": {
      "enum": [
        "circular",
        "rectangular"
      ],
      "type": "string"
    },
    "DuctType": {
      "enum": [
        "intake",
        "supply",
        "extract",
        "exhaust"
      ],
      "type": "string"
    },
    "EcoDesignController": {
      "additionalProperties": false,
      "properties": {
        "ecodesign_control_class": {
          "$ref": "#/$defs/EcoDesignControllerClass"
        },
        "max_outdoor_temp": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "min_flow_temp": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "min_outdoor_temp": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "ecodesign_control_class"
      ],
      "type": "object"
    },
    "EcoDesignControllerClass": {
      "maximum": 8,
      "minimum": 1,
      "type": "integer"
    },
    "EdgeInsulation": {
      "oneOf": [
        {
          "properties": {
            "edge_thermal_resistance": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "horizontal",
              "type": "string"
            },
            "width": {
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "edge_thermal_resistance",
            "type",
            "width"
          ],
          "title": "horizontal",
          "type": "object"
        },
        {
          "properties": {
            "depth": {
              "format": "double",
              "type": "number"
            },
            "edge_thermal_resistance": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "vertical",
              "type": "string"
            }
          },
          "required": [
            "depth",
            "edge_thermal_resistance",
            "type"
          ],
          "title": "vertical",
          "type": "object"
        }
      ]
    },
    "ElectricBattery": {
      "additionalProperties": false,
      "properties": {
        "battery_age": {
          "format": "double",
          "type": "number"
        },
        "battery_location": {
          "$ref": "#/$defs/BatteryLocation"
        },
        "capacity": {
          "format": "double",
          "type": "number"
        },
        "charge_discharge_efficiency_round_trip": {
          "format": "double",
          "type": "number"
        },
        "grid_charging_possible": {
          "type": "boolean"
        },
        "maximum_charge_rate_one_way_trip": {
          "format": "double",
          "type": "number"
        },
        "maximum_discharge_rate_one_way_trip": {
          "format": "double",
          "type": "number"
        },
        "minimum_charge_rate_one_way_trip": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "battery_age",
        "battery_location",
        "capacity",
        "charge_discharge_efficiency_round_trip",
        "grid_charging_possible",
        "maximum_charge_rate_one_way_trip",
        "maximum_discharge_rate_one_way_trip",
        "minimum_charge_rate_one_way_trip"
      ],
      "type": "object"
    },
    "EnergyDiverter": {
      "additionalProperties": false,
      "properties": {
        "Controlmax": {
          "type": "string"
        },
        "HeatSource": {
          "$ref": "#/$defs/DiverterHeatSourceType"
        },
        "StorageTank": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageTankType"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "HeatSource"
      ],
      "type": "object"
    },
    "EnergySupplyDetails": {
      "additionalProperties": false,
      "properties": {
        "ElectricBattery": {
          "anyOf": [
            {
              "$ref": "#/$defs/ElectricBattery"
            },
            {
              "type": "null"
            }
          ]
        },
        "diverter": {
          "anyOf": [
            {
              "$ref": "#/$defs/EnergyDiverter"
            },
            {
              "type": "null"
            }
          ]
        },
        "factor": {
          "anyOf": [
            {
              "$ref": "#/$defs/CustomEnergySourceFactor"
            },
            {
              "type": "null"
            }
          ]
        },
        "fuel": {
          "$ref": "#/$defs/FuelType"
        },
        "is_export_capable": {
          "description": "Denotes that this energy supply can export its surplus supply",
          "type": [
            "boolean",
            "null"
          ]
        },
        "priority": {
          "items": {
            "$ref": "#/$defs/SecondarySupplyType"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "tariff": {
          "type": [
            "string",
            "null"
          ]
        },
        "threshold_charges": {
          "anyOf": [
            {
              "items": {
                "format": "double",
                "type": "number"
              },
              "maxLength": 12,
              "minLength": 12,
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "threshold_prices": {
          "anyOf": [
            {
              "items": {
                "format": "double",
                "type": "number"
              },
              "maxLength": 12,
              "minLength": 12,
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "fuel"
      ],
      "type": "object"
    },
    "ExternalConditionsInput": {
      "additionalProperties": false,
      "properties": {
        "air_temperatures": {
          "description": "List of external air temperatures, one entry per hour (unit: ˚C)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "daylight_savings": {
          "anyOf": [
            {
              "$ref": "#/$defs/DaylightSavingsConfig"
            },
            {
              "type": "null"
            }
          ],
          "description": "How daylight savings are handled in the climate data"
        },
        "diffuse_horizontal_radiation": {
          "description": "List of diffuse horizontal radiation values, one entry per hour (unit: W/m²)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "direct_beam_conversion_needed": {
          "description": "A flag to indicate whether direct beam radiation from climate data needs to be converted from horizontal to normal incidence; if normal direct beam radiation values are provided then no conversion is needed",
          "type": [
            "boolean",
            "null"
          ]
        },
        "direct_beam_radiation": {
          "description": "List of direct beam radiation values, one entry per hour (unit: W/m²)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "end_day": {
          "description": "Last day of the time series, day of the year, 0 to 365",
          "format": "int32",
          "minimum": 0.0,
          "type": [
            "integer",
            "null"
          ]
        },
        "ground_temperatures": {
          "description": "(Not used)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "january_first": {
          "description": "Day of the week for January 1st, Monday to Sunday, 1 to 7",
          "format": "int32",
          "minimum": 0.0,
          "type": [
            "integer",
            "null"
          ]
        },
        "latitude": {
          "description": "Latitude of weather station, angle from south (unit: ˚)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "leap_day_included": {
          "description": "Whether climate data includes a leap day",
          "type": [
            "boolean",
            "null"
          ]
        },
        "longitude": {
          "description": "Longitude of weather station, easterly +ve westerly -ve (unit: ˚)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "shading_segments": {
          "description": "Data splitting the ground plane into segments (8-36) and giving height and distance to shading objects surrounding the building",
          "items": {
            "$ref": "#/$defs/ShadingSegment"
          },
          "type": "array"
        },
        "solar_reflectivity_of_ground": {
          "description": "List of ground reflectivity values, 0 to 1, one entry per hour",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "start_day": {
          "description": "First day of the time series, day of the year, 0 to 365",
          "format": "int32",
          "minimum": 0.0,
          "type": [
            "integer",
            "null"
          ]
        },
        "time_series_step": {
          "description": "Timestep of the time series data (unit: hours)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "timezone": {
          "description": "Timezone of weather station, -12 to 12",
          "format": "int32",
          "minimum": 0.0,
          "type": [
            "integer",
            "null"
          ]
        },
        "wind_directions": {
          "description": "List of wind directions in degrees where North=0, East=90, South=180, West=270. Values range: 0 to 360. Wind direction is reported by the direction from which it originates, e.g. a southernly (180 degree) wind blows from the south to the north. (unit: ˚)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "wind_speeds": {
          "description": "List of wind speeds, one entry per hour (unit: m/s)",
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": [
            "array",
            "null"
          ]
        }
      },
      "required": [],
      "type": "object"
    },
    "ExternalSensor": {
      "additionalProperties": false,
      "properties": {
        "correlation": {
          "items": {
            "$ref": "#/$defs/ExternalSensorCorrelation"
          },
          "type": "array"
        }
      },
      "required": [
        "correlation"
      ],
      "type": "object"
    },
    "ExternalSensorCorrelation": {
      "additionalProperties": false,
      "properties": {
        "max_charge": {
          "format": "double",
          "type": "number"
        },
        "temperature": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "temperature",
        "max_charge"
      ],
      "type": "object"
    },
    "FanSpeedData": {
      "additionalProperties": false,
      "properties": {
        "power_output": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "temperature_diff": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "power_output",
        "temperature_diff"
      ],
      "type": "object"
    },
    "FancoilTestData": {
      "additionalProperties": false,
      "properties": {
        "fan_power_W": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "fan_speed_data": {
          "items": {
            "$ref": "#/$defs/FanSpeedData"
          },
          "type": "array"
        }
      },
      "required": [
        "fan_power_W",
        "fan_speed_data"
      ],
      "type": "object"
    },
    "FloorType": {
      "enum": [
        "Slab_no_edge_insulation",
        "Slab_edge_insulation",
        "Suspended_floor",
        "Heated_basement",
        "Unheated_basement"
      ],
      "type": "string"
    },
    "FlueGasExhaustSituation": {
      "enum": [
        "into_room",
        "into_separate_duct",
        "into_mech_vent"
      ],
      "type": "string"
    },
    "FuelType": {
      "enum": [
        "LPG_bottled",
        "LPG_bulk",
        "LPG_condition_11F",
        "custom",
        "electricity",
        "energy_from_environment",
        "mains_gas",
        "unmet_demand"
      ],
      "type": "string"
    },
    "General": {
      "additionalProperties": false,
      "properties": {
        "build_type": {
          "$ref": "#/$defs/BuildType"
        },
        "storey_of_dwelling": {
          "format": "int32",
          "minimum": 0.0,
          "type": [
            "integer",
            "null"
          ]
        },
        "storeys_in_building": {
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        }
      },
      "required": [
        "build_type",
        "storeys_in_building"
      ],
      "type": "object"
    },
    "HeatPumpBackupControlType": {
      "enum": [
        "None",
        "TopUp",
        "Substitute"
      ],
      "type": "string"
    },
    "HeatPumpBoiler": {
      "additionalProperties": false,
      "properties": {
        "EnergySupply": {
          "type": "string"
        },
        "EnergySupply_aux": {
          "type": "string"
        },
        "boiler_location": {
          "$ref": "#/$defs/HeatSourceLocation"
        },
        "cost_schedule_hybrid": {
          "anyOf": [
            {
              "$ref": "#/$defs/BoilerCostScheduleHybrid"
            },
            {
              "type": "null"
            }
          ]
        },
        "efficiency_full_load": {
          "format": "double",
          "type": "number"
        },
        "efficiency_part_load": {
          "format": "double",
          "type": "number"
        },
        "electricity_circ_pump": {
          "format": "double",
          "type": "number"
        },
        "electricity_full_load": {
          "format": "double",
          "type": "number"
        },
        "electricity_part_load": {
          "format": "double",
          "type": "number"
        },
        "electricity_standby": {
          "format": "double",
          "type": "number"
        },
        "modulation_load": {
          "format": "double",
          "type": "number"
        },
        "rated_power": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "EnergySupply",
        "EnergySupply_aux",
        "boiler_location",
        "efficiency_full_load",
        "efficiency_part_load",
        "electricity_circ_pump",
        "electricity_full_load",
        "electricity_part_load",
        "electricity_standby",
        "modulation_load",
        "rated_power"
      ],
      "type": "object"
    },
    "HeatPumpBufferTank": {
      "additionalProperties": false,
      "properties": {
        "daily_losses": {
          "format": "double",
          "type": "number"
        },
        "pump_fixed_flow_rate": {
          "format": "double",
          "type": "number"
        },
        "pump_power_at_flow_rate": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "daily_losses",
        "pump_fixed_flow_rate",
        "pump_power_at_flow_rate",
        "volume"
      ],
      "type": "object"
    },
    "HeatPumpHotWaterOnlyTestDatum": {
      "additionalProperties": false,
      "properties": {
        "cop_dhw": {
          "format": "double",
          "type": "number"
        },
        "energy_input_measured": {
          "format": "double",
          "type": "number"
        },
        "hw_tapping_prof_daily_total": {
          "format": "double",
          "type": "number"
        },
        "hw_vessel_loss_daily": {
          "format": "double",
          "type": "number"
        },
        "power_standby": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "cop_dhw",
        "energy_input_measured",
        "hw_tapping_prof_daily_total",
        "hw_vessel_loss_daily",
        "power_standby"
      ],
      "type": "object"
    },
    "HeatPumpHotWaterTestData": {
      "additionalProperties": false,
      "properties": {
        "L": {
          "anyOf": [
            {
              "$ref": "#/$defs/HeatPumpHotWaterOnlyTestDatum"
            },
            {
              "type": "null"
            }
          ]
        },
        "M": {
          "$ref": "#/$defs/HeatPumpHotWaterOnlyTestDatum"
        }
      },
      "required": [
        "M"
      ],
      "type": "object"
    },
    "HeatPumpSinkType": {
      "enum": [
        "Water",
        "Air",
        "Glycol25"
      ],
      "type": "string"
    },
    "HeatPumpSourceType": {
      "enum": [
        "Ground",
        "OutsideAir",
        "ExhaustAirMEV",
        "ExhaustAirMVHR",
        "ExhaustAirMixed",
        "WaterGround",
        "WaterSurface",
        "HeatNetwork"
      ],
      "type": "string"
    },
    "HeatPumpTestDatum": {
      "additionalProperties": false,
      "properties": {
        "air_flow_rate": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "capacity": {
          "format": "double",
          "type": "number"
        },
        "cop": {
          "format": "double",
          "type": "number"
        },
        "degradation_coeff": {
          "format": "double",
          "type": "number"
        },
        "design_flow_temp": {
          "format": "double",
          "type": "number"
        },
        "eahp_mixed_ext_air_ratio": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "temp_outlet": {
          "format": "double",
          "type": "number"
        },
        "temp_source": {
          "format": "double",
          "type": "number"
        },
        "temp_test": {
          "format": "double",
          "type": "number"
        },
        "test_letter": {
          "$ref": "#/$defs/TestLetter"
        }
      },
      "required": [
        "capacity",
        "cop",
        "degradation_coeff",
        "design_flow_temp",
        "temp_outlet",
        "temp_source",
        "temp_test",
        "test_letter"
      ],
      "type": "object"
    },
    "HeatSource": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "Control": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatSourceControlType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Controlmax": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Controlmin": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "EnergySupply": {
              "type": "string"
            },
            "heater_position": {
              "format": "double",
              "type": "number"
            },
            "power": {
              "format": "double",
              "type": "number"
            },
            "thermostat_position": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "ImmersionHeater",
              "type": "string"
            }
          },
          "required": [
            "EnergySupply",
            "heater_position",
            "power",
            "type"
          ],
          "title": "ImmersionHeater",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Controlmax": {
              "type": "string"
            },
            "EnergySupply": {
              "type": "string"
            },
            "area_module": {
              "format": "double",
              "type": "number"
            },
            "collector_mass_flow_rate": {
              "format": "double",
              "type": "number"
            },
            "control": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatSourceControlType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "first_order_hlc": {
              "format": "double",
              "type": "number"
            },
            "heater_position": {
              "format": "double",
              "type": "number"
            },
            "incidence_angle_modifier": {
              "format": "double",
              "type": "number"
            },
            "modules": {
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "orientation360": {
              "format": "double",
              "type": "number"
            },
            "peak_collector_efficiency": {
              "format": "double",
              "type": "number"
            },
            "power_pump": {
              "format": "double",
              "type": "number"
            },
            "power_pump_control": {
              "format": "double",
              "type": "number"
            },
            "second_order_hlc": {
              "format": "double",
              "type": "number"
            },
            "sol_loc": {
              "$ref": "#/$defs/SolarCellLocation"
            },
            "solar_loop_piping_hlc": {
              "format": "double",
              "type": "number"
            },
            "thermostat_position": {
              "format": "double",
              "type": "number"
            },
            "tilt": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "SolarThermalSystem",
              "type": "string"
            }
          },
          "required": [
            "Controlmax",
            "EnergySupply",
            "area_module",
            "collector_mass_flow_rate",
            "first_order_hlc",
            "heater_position",
            "incidence_angle_modifier",
            "modules",
            "orientation360",
            "peak_collector_efficiency",
            "power_pump",
            "power_pump_control",
            "second_order_hlc",
            "sol_loc",
            "solar_loop_piping_hlc",
            "thermostat_position",
            "tilt",
            "type"
          ],
          "title": "SolarThermalSystem",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "anyOf": [
                {
                  "$ref": "#/$defs/ColdWaterSourceType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Control": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatSourceControlType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Controlmax": {
              "type": [
                "string",
                "null"
              ]
            },
            "Controlmin": {
              "type": [
                "string",
                "null"
              ]
            },
            "EnergySupply": {
              "type": "string"
            },
            "heater_position": {
              "format": "double",
              "type": "number"
            },
            "name": {
              "type": "string"
            },
            "temp_flow_limit_upper": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "temp_return": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thermostat_position": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "HeatSourceWet",
              "type": "string"
            }
          },
          "required": [
            "EnergySupply",
            "heater_position",
            "name",
            "type"
          ],
          "title": "HeatSourceWet",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Control": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatSourceControlType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Controlmax": {
              "type": "string"
            },
            "Controlmin": {
              "type": "string"
            },
            "EnergySupply": {
              "type": "string"
            },
            "daily_losses_declared": {
              "format": "double",
              "type": "number"
            },
            "heat_exchanger_surface_area_declared": {
              "format": "double",
              "type": "number"
            },
            "heater_position": {
              "format": "double",
              "type": "number"
            },
            "in_use_factor_mismatch": {
              "format": "double",
              "type": "number"
            },
            "power_max": {
              "format": "double",
              "type": "number"
            },
            "tank_volume_declared": {
              "format": "double",
              "type": "number"
            },
            "test_data": {
              "$ref": "#/$defs/HeatPumpHotWaterTestData"
            },
            "thermostat_position": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "HeatPump_HWOnly",
              "type": "string"
            },
            "vol_hw_daily_average": {
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "Controlmax",
            "Controlmin",
            "EnergySupply",
            "daily_losses_declared",
            "heat_exchanger_surface_area_declared",
            "heater_position",
            "in_use_factor_mismatch",
            "power_max",
            "tank_volume_declared",
            "test_data",
            "thermostat_position",
            "type",
            "vol_hw_daily_average"
          ],
          "title": "HeatPump_HWOnly",
          "type": "object"
        }
      ]
    },
    "HeatSourceControlType": {
      "enum": [
        "hw timer",
        "window opening",
        "WindowOpening_LivingRoom",
        "WindowOpening_RestOfDwelling",
        "always off"
      ],
      "type": "string"
    },
    "HeatSourceLocation": {
      "enum": [
        "internal",
        "external"
      ],
      "type": "string"
    },
    "HeatSourceWetDetails": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "BufferTank": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatPumpBufferTank"
                },
                {
                  "type": "null"
                }
              ]
            },
            "EnergySupply": {
              "type": "string"
            },
            "EnergySupply_heat_network": {
              "type": [
                "string",
                "null"
              ]
            },
            "MechanicalVentilation": {
              "type": [
                "string",
                "null"
              ]
            },
            "backup_ctrl_type": {
              "$ref": "#/$defs/HeatPumpBackupControlType"
            },
            "boiler": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatPumpBoiler"
                },
                {
                  "type": "null"
                }
              ]
            },
            "eahp_mixed_max_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "eahp_mixed_min_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_modulation_rate_20": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_modulation_rate_35": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_modulation_rate_55": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_temp_diff_flow_return_for_hp_to_operate": {
              "format": "double",
              "type": "number"
            },
            "modulating_control": {
              "type": "boolean"
            },
            "power_crankcase_heater": {
              "format": "double",
              "type": "number"
            },
            "power_heating_circ_pump": {
              "format": "double",
              "type": "number"
            },
            "power_heating_warm_air_fan": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "power_max_backup": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "power_off": {
              "format": "double",
              "type": "number"
            },
            "power_source_circ_pump": {
              "format": "double",
              "type": "number"
            },
            "power_standby": {
              "format": "double",
              "type": "number"
            },
            "sink_type": {
              "$ref": "#/$defs/HeatPumpSinkType"
            },
            "source_type": {
              "$ref": "#/$defs/HeatPumpSourceType"
            },
            "temp_distribution_heat_network": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "temp_lower_operating_limit": {
              "format": "double",
              "type": "number"
            },
            "temp_return_feed_max": {
              "format": "double",
              "type": "number"
            },
            "test_data_EN14825": {
              "items": {
                "$ref": "#/$defs/HeatPumpTestDatum"
              },
              "type": "array"
            },
            "time_constant_onoff_operation": {
              "format": "double",
              "type": "number"
            },
            "time_delay_backup": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "HeatPump",
              "type": "string"
            },
            "var_flow_temp_ctrl_during_test": {
              "type": "boolean"
            }
          },
          "required": [
            "EnergySupply",
            "backup_ctrl_type",
            "min_temp_diff_flow_return_for_hp_to_operate",
            "modulating_control",
            "power_crankcase_heater",
            "power_heating_circ_pump",
            "power_off",
            "power_source_circ_pump",
            "power_standby",
            "sink_type",
            "source_type",
            "temp_lower_operating_limit",
            "temp_return_feed_max",
            "test_data_EN14825",
            "time_constant_onoff_operation",
            "time_delay_backup",
            "type",
            "var_flow_temp_ctrl_during_test"
          ],
          "title": "HeatPump",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "BufferTank": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatPumpBufferTank"
                },
                {
                  "type": "null"
                }
              ]
            },
            "EnergySupply": {
              "type": "string"
            },
            "EnergySupply_heat_network": {
              "type": [
                "string",
                "null"
              ]
            },
            "MechanicalVentilation": {
              "type": [
                "string",
                "null"
              ]
            },
            "boiler": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatPumpBoiler"
                },
                {
                  "type": "null"
                }
              ]
            },
            "eahp_mixed_max_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "eahp_mixed_min_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_modulation_rate_20": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_modulation_rate_35": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_modulation_rate_55": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "product_reference": {
              "description": "A unique reference to a product held within the HEM database (PCDB)",
              "title": "Reference to the product in the HEM database",
              "type": "string"
            },
            "temp_distribution_heat_network": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "HeatPump",
              "type": "string"
            }
          },
          "required": [
            "EnergySupply",
            "product_reference",
            "type"
          ],
          "title": "HeatPump (with HEM product reference)",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "EnergySupply": {
              "type": "string"
            },
            "EnergySupply_aux": {
              "type": "string"
            },
            "boiler_location": {
              "$ref": "#/$defs/HeatSourceLocation"
            },
            "efficiency_full_load": {
              "format": "double",
              "type": "number"
            },
            "efficiency_part_load": {
              "format": "double",
              "type": "number"
            },
            "electricity_circ_pump": {
              "format": "double",
              "type": "number"
            },
            "electricity_full_load": {
              "format": "double",
              "type": "number"
            },
            "electricity_part_load": {
              "format": "double",
              "type": "number"
            },
            "electricity_standby": {
              "format": "double",
              "type": "number"
            },
            "modulation_load": {
              "format": "double",
              "type": "number"
            },
            "rated_power": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "Boiler",
              "type": "string"
            }
          },
          "required": [
            "EnergySupply",
            "EnergySupply_aux",
            "boiler_location",
            "efficiency_full_load",
            "efficiency_part_load",
            "electricity_circ_pump",
            "electricity_full_load",
            "electricity_part_load",
            "electricity_standby",
            "modulation_load",
            "rated_power",
            "type"
          ],
          "title": "Boiler",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "A": {
              "format": "double",
              "type": "number"
            },
            "B": {
              "format": "double",
              "type": "number"
            },
            "ControlCharge": {
              "type": "string"
            },
            "EnergySupply": {
              "type": "string"
            },
            "capillary_diameter_m": {
              "format": "double",
              "type": "number"
            },
            "electricity_circ_pump": {
              "format": "double",
              "type": "number"
            },
            "electricity_standby": {
              "format": "double",
              "type": "number"
            },
            "flow_rate_l_per_min": {
              "float": "double",
              "type": "number"
            },
            "heat_battery_location": {
              "$ref": "#/$defs/HeatSourceLocation"
            },
            "heat_exchanger_surface_area_m2": {
              "format": "double",
              "type": "number"
            },
            "heat_storage_zone_material_kJ_per_K_above_Phase_transition": {
              "format": "double",
              "type": "number"
            },
            "heat_storage_zone_material_kJ_per_K_below_Phase_transition": {
              "format": "double",
              "type": "number"
            },
            "heat_storage_zone_material_kJ_per_K_during_Phase_transition": {
              "format": "double",
              "type": "number"
            },
            "max_rated_losses": {
              "format": "double",
              "type": "number"
            },
            "max_temperature": {
              "format": "double",
              "type": "number"
            },
            "number_of_units": {
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "phase_transition_temperature_lower": {
              "format": "double",
              "type": "number"
            },
            "phase_transition_temperature_upper": {
              "format": "double",
              "type": "number"
            },
            "rated_charge_power": {
              "format": "double",
              "type": "number"
            },
            "simultaneous_charging_and_discharging": {
              "type": "boolean"
            },
            "type": {
              "const": "HeatBattery",
              "type": "string"
            },
            "velocity_in_HEX_tube_at_1_l_per_min_m_per_s": {
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "A",
            "B",
            "ControlCharge",
            "EnergySupply",
            "capillary_diameter_m",
            "electricity_circ_pump",
            "electricity_standby",
            "flow_rate_l_per_min",
            "heat_exchanger_surface_area_m2",
            "heat_storage_zone_material_kJ_per_K_above_Phase_transition",
            "heat_storage_zone_material_kJ_per_K_below_Phase_transition",
            "heat_storage_zone_material_kJ_per_K_during_Phase_transition",
            "max_rated_losses",
            "max_temperature",
            "number_of_units",
            "phase_transition_temperature_upper",
            "phase_transition_temperature_lower",
            "rated_charge_power",
            "simultaneous_charging_and_discharging",
            "type",
            "velocity_in_HEX_tube_at_1_l_per_min_m_per_s"
          ],
          "title": "HeatBattery",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "EnergySupply": {
              "type": "string"
            },
            "HIU_daily_loss": {
              "format": "double",
              "type": "number"
            },
            "building_level_distribution_losses": {
              "format": "double",
              "type": "number"
            },
            "power_max": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "HIU",
              "type": "string"
            }
          },
          "required": [
            "EnergySupply",
            "HIU_daily_loss",
            "building_level_distribution_losses",
            "power_max",
            "type"
          ],
          "title": "HIU",
          "type": "object"
        }
      ]
    },
    "HeatSourceWetType": {
      "oneOf": [
        {
          "enum": [
            "boiler",
            "HeatNetwork",
            "hp"
          ],
          "type": "string"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Other": {
              "type": "string"
            }
          },
          "required": [
            "Other"
          ],
          "type": "object"
        }
      ]
    },
    "HeatingControlType": {
      "enum": [
        "SeparateTimeAndTempControl",
        "SeparateTempControl"
      ],
      "type": "string"
    },
    "HotWaterDemand": {
      "additionalProperties": false,
      "properties": {
        "Bath": {
          "anyOf": [
            {
              "$ref": "#/$defs/Baths"
            },
            {
              "type": "null"
            }
          ]
        },
        "Distribution": {
          "items": {
            "$ref": "#/$defs/WaterPipeworkSimple"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "Other": {
          "anyOf": [
            {
              "$ref": "#/$defs/OtherWaterUses"
            },
            {
              "type": "null"
            }
          ]
        },
        "Shower": {
          "anyOf": [
            {
              "$ref": "#/$defs/Showers"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object"
    },
    "HotWaterSource": {
      "additionalProperties": false,
      "properties": {
        "hw cylinder": {
          "$ref": "#/$defs/HotWaterSourceDetails"
        }
      },
      "required": [
        "hw cylinder"
      ],
      "type": "object"
    },
    "HotWaterSourceDetails": {
      "oneOf": [
        {
          "$ref": "#/$defs/StorageTank"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "Control": {
              "$ref": "#/$defs/HeatSourceControlType"
            },
            "HeatSourceWet": {
              "$ref": "#/$defs/HeatSourceWetType"
            },
            "daily_HW_usage": {
              "format": "double",
              "type": "number"
            },
            "fuel_energy_2": {
              "format": "double",
              "type": "number"
            },
            "rejected_energy_1": {
              "format": "double",
              "type": "number"
            },
            "rejected_energy_2": {
              "format": "double",
              "type": "number"
            },
            "rejected_factor_3": {
              "format": "double",
              "type": "number"
            },
            "separate_DHW_tests": {
              "$ref": "#/$defs/BoilerHotWaterTest"
            },
            "setpoint_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "storage_loss_factor_2": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "CombiBoiler",
              "type": "string"
            }
          },
          "required": [
            "ColdWaterSource",
            "HeatSourceWet",
            "Control",
            "daily_HW_usage",
            "fuel_energy_2",
            "rejected_energy_1",
            "rejected_energy_2",
            "rejected_factor_3",
            "separate_DHW_tests",
            "storage_loss_factor_2",
            "type"
          ],
          "title": "CombiBoiler",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "Control": {
              "anyOf": [
                {
                  "$ref": "#/$defs/HeatSourceControlType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "HeatSourceWet": {
              "$ref": "#/$defs/HeatSourceWetType"
            },
            "setpoint_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "HIU",
              "type": "string"
            }
          },
          "required": [
            "ColdWaterSource",
            "HeatSourceWet",
            "type"
          ],
          "title": "HIU",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "EnergySupply": {
              "type": "string"
            },
            "efficiency": {
              "format": "double",
              "type": "number"
            },
            "setpoint_temp": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "PointOfUse",
              "type": "string"
            }
          },
          "required": [
            "ColdWaterSource",
            "EnergySupply",
            "efficiency",
            "type"
          ],
          "title": "PointOfUse",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "EnergySupply_pump": {
              "type": "string"
            },
            "HeatSource": {
              "additionalProperties": {
                "$ref": "#/$defs/HeatSource"
              },
              "type": "object"
            },
            "daily_losses": {
              "format": "double",
              "type": "number"
            },
            "init_temp": {
              "format": "double",
              "type": "number"
            },
            "max_flow_rate_pump_l_per_min": {
              "format": "double",
              "type": "number"
            },
            "power_pump_kW": {
              "format": "double",
              "type": "number"
            },
            "primary_pipework": {
              "items": {
                "$ref": "#/$defs/WaterPipeworkSimple"
              },
              "type": "array"
            },
            "temp_setpnt_max": {
              "type": "string"
            },
            "temp_usable": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "SmartHotWaterTank",
              "type": "string"
            },
            "volume": {
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "ColdWaterSource",
            "EnergySupply_pump",
            "HeatSource",
            "daily_losses",
            "init_temp",
            "max_flow_rate_pump_l_per_min",
            "power_pump_kW",
            "temp_usable",
            "temp_setpnt_max",
            "type",
            "volume"
          ],
          "title": "SmartHotWaterTank",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "Control": {
              "type": "string"
            },
            "HeatSourceWet": {
              "type": "string"
            },
            "type": {
              "const": "HeatBattery",
              "type": "string"
            }
          },
          "required": [
            "ColdWaterSource",
            "Control",
            "HeatSourceWet",
            "type"
          ],
          "title": "HeatBattery",
          "type": "object"
        }
      ]
    },
    "InfiltrationVentilation": {
      "additionalProperties": false,
      "properties": {
        "AirTerminalDevices": {
          "additionalProperties": {
            "$ref": "#/$defs/AirTerminalDevice"
          },
          "type": [
            "object",
            "null"
          ]
        },
        "CombustionAppliances": {
          "additionalProperties": {
            "$ref": "#/$defs/CombustionAppliance"
          },
          "type": "object"
        },
        "Control_VentAdjustMax": {
          "type": [
            "string",
            "null"
          ]
        },
        "Control_VentAdjustMin": {
          "type": [
            "string",
            "null"
          ]
        },
        "Control_WindowAdjust": {
          "type": [
            "string",
            "null"
          ]
        },
        "Cowls": {
          "additionalProperties": {
            "type": "null"
          },
          "type": "object"
        },
        "Leaks": {
          "$ref": "#/$defs/VentilationLeaks"
        },
        "MechanicalVentilation": {
          "additionalProperties": {
            "$ref": "#/$defs/MechanicalVentilation"
          },
          "type": "object"
        },
        "PDUs": {
          "additionalProperties": {
            "type": "null"
          },
          "type": "object"
        },
        "Vents": {
          "additionalProperties": {
            "$ref": "#/$defs/Vent"
          },
          "type": "object"
        },
        "ach_max_static_calcs": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "ach_min_static_calcs": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "altitude": {
          "format": "double",
          "type": "number"
        },
        "cross_vent_factor": {
          "type": "boolean"
        },
        "noise_nuisance": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "shield_class": {
          "$ref": "#/$defs/VentilationShieldClass"
        },
        "terrain_class": {
          "$ref": "#/$defs/TerrainClass"
        },
        "vent_opening_ratio_init": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "ventilation_zone_base_height": {
          "description": "Base height of the ventilation zone relative to ground (m)",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "CombustionAppliances",
        "Cowls",
        "Leaks",
        "PDUs",
        "Vents",
        "altitude",
        "cross_vent_factor",
        "shield_class",
        "terrain_class",
        "ventilation_zone_base_height"
      ],
      "type": "object"
    },
    "InternalGains": {
      "additionalProperties": false,
      "properties": {
        "ColdWaterLosses": {
          "anyOf": [
            {
              "$ref": "#/$defs/InternalGainsDetails"
            },
            {
              "type": "null"
            }
          ]
        },
        "EvaporativeLosses": {
          "anyOf": [
            {
              "$ref": "#/$defs/InternalGainsDetails"
            },
            {
              "type": "null"
            }
          ]
        },
        "metabolic gains": {
          "anyOf": [
            {
              "$ref": "#/$defs/InternalGainsDetails"
            },
            {
              "type": "null"
            }
          ]
        },
        "other": {
          "anyOf": [
            {
              "$ref": "#/$defs/InternalGainsDetails"
            },
            {
              "type": "null"
            }
          ]
        },
        "total internal gains": {
          "anyOf": [
            {
              "$ref": "#/$defs/InternalGainsDetails"
            },
            {
              "type": "null"
            }
          ]
        },
        "total_internal_gains": {
          "anyOf": [
            {
              "$ref": "#/$defs/InternalGainsDetails"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object"
    },
    "InternalGainsDetails": {
      "additionalProperties": false,
      "properties": {
        "schedule": {
          "$ref": "#/$defs/Schedule_for_double"
        },
        "start_day": {
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "time_series_step": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "schedule",
        "start_day",
        "time_series_step"
      ],
      "type": "object"
    },
    "InverterType": {
      "enum": [
        "optimised_inverter",
        "string_inverter"
      ],
      "type": "string"
    },
    "MVHRLocation": {
      "enum": [
        "inside",
        "outside"
      ],
      "type": "string"
    },
    "MassDistributionClass": {
      "description": "distribution of mass in building element, one of: 'I' - mass concentrated on internal side; 'E':  mass concentrated on external side; 'IE': mass divided over internal and external side; 'D':  mass equally distributed; 'M':  mass concentrated inside",
      "enum": [
        "D",
        "E",
        "I",
        "IE",
        "M"
      ],
      "type": "string"
    },
    "MechanicalVentilation": {
      "additionalProperties": false,
      "properties": {
        "Control": {
          "type": [
            "string",
            "null"
          ]
        },
        "EnergySupply": {
          "type": "string"
        },
        "SFP": {
          "description": "Specific fan power, inclusive of any in use factors (unit: W/l/s)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "design_outdoor_air_flow_rate": {
          "description": "(unit: m³/hour)",
          "format": "double",
          "type": "number"
        },
        "design_zone_cooling_covered_by_mech_vent": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "design_zone_heating_covered_by_mech_vent": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "ductwork": {
          "items": {
            "$ref": "#/$defs/MechanicalVentilationDuctwork"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "measured_air_flow_rate": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "measured_fan_power": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "mvhr_eff": {
          "description": "MVHR efficiency",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "mvhr_location": {
          "anyOf": [
            {
              "$ref": "#/$defs/MVHRLocation"
            },
            {
              "type": "null"
            }
          ]
        },
        "sup_air_flw_ctrl": {
          "$ref": "#/$defs/SupplyAirFlowRateControlType"
        },
        "sup_air_temp_ctrl": {
          "$ref": "#/$defs/SupplyAirTemperatureControlType"
        },
        "vent_sys_op": {
          "type": [
            "string",
            "null"
          ]
        },
        "vent_type": {
          "$ref": "#/$defs/VentType"
        }
      },
      "required": [
        "EnergySupply",
        "design_outdoor_air_flow_rate",
        "sup_air_flw_ctrl",
        "sup_air_temp_ctrl",
        "vent_type"
      ],
      "type": "object"
    },
    "MechanicalVentilationDuctwork": {
      "additionalProperties": false,
      "properties": {
        "cross_section_shape": {
          "$ref": "#/$defs/DuctShape"
        },
        "duct_perimeter_mm": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "duct_type": {
          "$ref": "#/$defs/DuctType"
        },
        "external_diameter_mm": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "insulation_thermal_conductivity": {
          "format": "double",
          "type": "number"
        },
        "insulation_thickness_mm": {
          "format": "double",
          "type": "number"
        },
        "internal_diameter_mm": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "length": {
          "format": "double",
          "type": "number"
        },
        "reflective": {
          "type": "boolean"
        }
      },
      "required": [
        "cross_section_shape",
        "duct_type",
        "insulation_thermal_conductivity",
        "insulation_thickness_mm",
        "length",
        "reflective"
      ],
      "type": "object"
    },
    "OnSiteGenerationDetails": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "EnergySupply": {
              "type": "string"
            },
            "base_height": {
              "description": "The distance between the ground and the lowest edge of the PV panel (unit: m)",
              "format": "double",
              "type": "number"
            },
            "height": {
              "description": "Height of the PV panel (unit: m)",
              "format": "double",
              "type": "number"
            },
            "inverter_is_inside": {
              "description": "Whether the inverter is considered inside the building",
              "type": "boolean"
            },
            "inverter_peak_power": {
              "description": "Peak power; represents the peak electrical power input to the inverter (unit: kW)",
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "inverter_peak_power_ac": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "inverter_peak_power_dc": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "inverter_type": {
              "oneOf": [
                {
                  "$ref": "#/$defs/InverterType"
                },
                {
                  "type": "null"
                }
              ]
            },
            "orientation360": {
              "description": "Orientation angle of the inclined surface, expressed as the geographical azimuth angle of the horizontal projection of the inclined surface normal, 0 to 360 (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "peak_power": {
              "description": "Peak power; represents the electrical power of a photovoltaic system with a given area and a for a solar irradiance of 1 kW/m² on this surface (at 25 degrees) (unit: kW)",
              "format": "double",
              "type": "number"
            },
            "pitch": {
              "description": "The tilt angle (inclination) of the PV panel from horizontal, measured upwards facing, 0 to 90 (unit: ˚)",
              "format": "double",
              "type": "number"
            },
            "shading": {
              "items": {
                "$ref": "#/$defs/WindowShadingObject"
              },
              "type": "array"
            },
            "type": {
              "const": "PhotovoltaicSystem",
              "type": "string"
            },
            "ventilation_strategy": {
              "$ref": "#/$defs/OnSiteGenerationVentilationStrategy"
            },
            "width": {
              "description": "Width of the PV panel (unit: m)",
              "format": "double",
              "type": "number"
            }
          },
          "required": [
            "EnergySupply",
            "base_height",
            "height",
            "inverter_is_inside",
            "orientation360",
            "peak_power",
            "pitch",
            "shading",
            "type",
            "ventilation_strategy",
            "width"
          ],
          "title": "PhotovoltaicSystem",
          "type": "object"
        }
      ]
    },
    "OnSiteGenerationVentilationStrategy": {
      "enum": [
        "unventilated",
        "moderately_ventilated",
        "strongly_or_forced_ventilated",
        "rear_surface_free"
      ],
      "type": "string"
    },
    "OtherWaterUseDetails": {
      "additionalProperties": false,
      "properties": {
        "ColdWaterSource": {
          "$ref": "#/$defs/ColdWaterSourceType"
        },
        "flowrate": {
          "description": "Tap/outlet flow rate (unit: litre/minute)",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "ColdWaterSource",
        "flowrate"
      ],
      "type": "object"
    },
    "OtherWaterUses": {
      "additionalProperties": {
        "$ref": "#/$defs/OtherWaterUseDetails"
      },
      "type": "object"
    },
    "ScheduleEntry_for_Boolean": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/ScheduleRepeater_for_Boolean"
        },
        {
          "type": "string"
        }
      ]
    },
    "ScheduleEntry_for_double": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "format": "double",
          "type": "number"
        },
        {
          "$ref": "#/$defs/ScheduleRepeater_for_double"
        },
        {
          "type": "string"
        }
      ]
    },
    "ScheduleReferenceEntry_for_Boolean": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/ScheduleEntry_for_Boolean"
          },
          "type": "array"
        },
        {
          "$ref": "#/$defs/ScheduleEntry_for_Boolean"
        }
      ]
    },
    "ScheduleReferenceEntry_for_double": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/ScheduleEntry_for_double"
          },
          "type": "array"
        },
        {
          "$ref": "#/$defs/ScheduleEntry_for_double"
        }
      ]
    },
    "ScheduleRepeaterEntry_for_Boolean": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "boolean"
        }
      ]
    },
    "ScheduleRepeaterEntry_for_double": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "format": "double",
          "type": "number"
        }
      ]
    },
    "ScheduleRepeaterValue_for_Boolean": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/ScheduleRepeaterEntry_for_Boolean"
        }
      ]
    },
    "ScheduleRepeaterValue_for_double": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/ScheduleRepeaterEntry_for_double"
        }
      ]
    },
    "ScheduleRepeater_for_Boolean": {
      "properties": {
        "repeat": {
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "value": {
          "$ref": "#/$defs/ScheduleRepeaterValue_for_Boolean"
        }
      },
      "required": [
        "repeat",
        "value"
      ],
      "type": "object"
    },
    "ScheduleRepeater_for_double": {
      "properties": {
        "repeat": {
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "value": {
          "$ref": "#/$defs/ScheduleRepeaterValue_for_double"
        }
      },
      "required": [
        "repeat",
        "value"
      ],
      "type": "object"
    },
    "Schedule_for_Boolean": {
      "additionalProperties": {
        "$ref": "#/$defs/ScheduleReferenceEntry_for_Boolean"
      },
      "properties": {
        "main": {
          "items": {
            "$ref": "#/$defs/ScheduleEntry_for_Boolean"
          },
          "type": "array"
        }
      },
      "required": [
        "main"
      ],
      "type": "object"
    },
    "Schedule_for_double": {
      "additionalProperties": {
        "$ref": "#/$defs/ScheduleReferenceEntry_for_double"
      },
      "properties": {
        "main": {
          "items": {
            "$ref": "#/$defs/ScheduleEntry_for_double"
          },
          "type": "array"
        }
      },
      "required": [
        "main"
      ],
      "type": "object"
    },
    "SecondarySupplyType": {
      "enum": [
        "ElectricBattery",
        "diverter"
      ],
      "type": "string"
    },
    "ShadingObject": {
      "properties": {
        "distance": {
          "format": "double",
          "type": "number"
        },
        "height": {
          "format": "double",
          "type": "number"
        },
        "type": {
          "$ref": "#/$defs/ShadingObjectType"
        }
      },
      "required": [
        "distance",
        "height",
        "type"
      ],
      "type": "object"
    },
    "ShadingObjectType": {
      "enum": [
        "obstacle",
        "overhang"
      ],
      "type": "string"
    },
    "ShadingSegment": {
      "properties": {
        "end360": {
          "format": "double",
          "type": "number"
        },
        "number": {
          "format": "int32",
          "minimum": 0.0,
          "type": "integer"
        },
        "shading": {
          "items": {
            "$ref": "#/$defs/ShadingObject"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "start360": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "end360",
        "number",
        "start360"
      ],
      "type": "object"
    },
    "Shower": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "WWHRS": {
              "type": [
                "string",
                "null"
              ]
            },
            "flowrate": {
              "description": "Tap/outlet flow rate (unit: litre/minute)",
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "MixerShower",
              "type": "string"
            }
          },
          "required": [
            "ColdWaterSource",
            "flowrate",
            "type"
          ],
          "title": "MixerShower",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "ColdWaterSource": {
              "$ref": "#/$defs/ColdWaterSourceType"
            },
            "EnergySupply": {
              "type": "string"
            },
            "rated_power": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "InstantElecShower",
              "type": "string"
            }
          },
          "required": [
            "ColdWaterSource",
            "EnergySupply",
            "rated_power",
            "type"
          ],
          "title": "InstantElecShower",
          "type": "object"
        }
      ]
    },
    "Showers": {
      "additionalProperties": {
        "$ref": "#/$defs/Shower"
      },
      "type": "object"
    },
    "SimulationTime": {
      "properties": {
        "end": {
          "format": "double",
          "type": "number"
        },
        "start": {
          "format": "double",
          "type": "number"
        },
        "step": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "end",
        "start",
        "step"
      ],
      "type": "object"
    },
    "SmartApplianceBattery": {
      "additionalProperties": false,
      "properties": {
        "battery_state_of_charge": {
          "additionalProperties": {
            "items": {
              "format": "double",
              "type": "number"
            },
            "type": "array"
          },
          "type": "object"
        },
        "energy_into_battery_from_generation": {
          "additionalProperties": {
            "items": {
              "format": "double",
              "type": "number"
            },
            "type": "array"
          },
          "type": "object"
        },
        "energy_into_battery_from_grid": {
          "additionalProperties": {
            "items": {
              "format": "double",
              "type": "number"
            },
            "type": "array"
          },
          "type": "object"
        },
        "energy_out_of_battery": {
          "additionalProperties": {
            "items": {
              "format": "double",
              "type": "number"
            },
            "type": "array"
          },
          "type": "object"
        }
      },
      "required": [
        "battery_state_of_charge",
        "energy_into_battery_from_generation",
        "energy_into_battery_from_grid",
        "energy_out_of_battery"
      ],
      "type": "object"
    },
    "SmartApplianceControlDetails": {
      "additionalProperties": false,
      "properties": {
        "Appliances": {
          "items": {
            "$ref": "#/$defs/ApplianceKey"
          },
          "type": "array"
        },
        "battery24hr": {
          "$ref": "#/$defs/SmartApplianceBattery",
          "type": "object"
        },
        "non_appliance_demand_24hr": {
          "additionalProperties": {
            "items": {
              "format": "double",
              "type": "number"
            },
            "type": "array"
          },
          "type": "object"
        },
        "power_timeseries": {
          "additionalProperties": {
            "items": {
              "format": "double",
              "type": "number"
            },
            "type": "array"
          },
          "type": "object"
        },
        "time_series_step": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "Appliances",
        "battery24hr",
        "non_appliance_demand_24hr",
        "power_timeseries",
        "time_series_step"
      ],
      "type": "object"
    },
    "SolarCellLocation": {
      "enum": [
        "OUT",
        "HS",
        "NHS"
      ],
      "type": "string"
    },
    "SpaceCoolSystemDetails": {
      "additionalProperties": false,
      "properties": {
        "Control": {
          "type": [
            "string",
            "null"
          ]
        },
        "EnergySupply": {
          "type": "string"
        },
        "advanced_start": {
          "float": "double",
          "type": "number"
        },
        "cooling_capacity": {
          "description": "Maximum cooling capacity of the system (unit: kW)",
          "format": "double",
          "type": "number"
        },
        "efficiency": {
          "format": "double",
          "type": "number"
        },
        "frac_convective": {
          "description": "Convective fraction for cooling",
          "format": "double",
          "type": "number"
        },
        "temp_setback": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "type": {
          "$ref": "#/$defs/SpaceCoolSystemType"
        }
      },
      "required": [
        "EnergySupply",
        "cooling_capacity",
        "efficiency",
        "frac_convective",
        "type"
      ],
      "type": "object"
    },
    "SpaceCoolSystemType": {
      "enum": [
        "AirConditioning"
      ],
      "type": "string"
    },
    "SpaceHeatControlType": {
      "enum": [
        "livingroom",
        "restofdwelling"
      ],
      "type": "string"
    },
    "SpaceHeatSystemDetails": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "Control": {
              "type": [
                "string",
                "null"
              ]
            },
            "EnergySupply": {
              "type": "string"
            },
            "HeatSource": {
              "anyOf": [
                {
                  "$ref": "#/$defs/SpaceHeatSystemHeatSource"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Zone": {
              "type": [
                "string",
                "null"
              ]
            },
            "advanced_start": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "frac_convective": {
              "description": "Convective fraction for heating",
              "format": "double",
              "type": "number"
            },
            "rated_power": {
              "description": "(unit: kW)",
              "format": "double",
              "type": "number"
            },
            "temp_setback": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "InstantElecHeater",
              "type": "string"
            }
          },
          "required": [
            "EnergySupply",
            "frac_convective",
            "rated_power",
            "type"
          ],
          "title": "InstantElecHeater",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Control": {
              "type": [
                "string",
                "null"
              ]
            },
            "ControlCharger": {
              "type": "string"
            },
            "ESH_max_output": {
              "items": {
                "items": {
                  "format": "double",
                  "type": "number"
                },
                "maxLength": 2,
                "minLength": 2,
                "type": "array"
              },
              "type": "array"
            },
            "ESH_min_output": {
              "items": {
                "items": {
                  "format": "double",
                  "type": "number"
                },
                "maxLength": 2,
                "minLength": 2,
                "type": "array"
              },
              "type": "array"
            },
            "EnergySupply": {
              "type": "string"
            },
            "HeatSource": {
              "anyOf": [
                {
                  "$ref": "#/$defs/SpaceHeatSystemHeatSource"
                },
                {
                  "type": "null"
                }
              ]
            },
            "Zone": {
              "description": "The zone where the unit(s) is/are installed",
              "type": "string"
            },
            "advanced_start": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "air_flow_type": {
              "enum": [
                "fan-assisted",
                "damper-only"
              ],
              "type": "string"
            },
            "fan_pwr": {
              "description": "Fan power (unit: W)",
              "format": "double",
              "type": "number"
            },
            "frac_convective": {
              "description": "Convective fraction for heating",
              "format": "double",
              "type": "number"
            },
            "n_units": {
              "format": "int32",
              "minimum": 0.0,
              "type": "integer"
            },
            "pwr_in": {
              "format": "double",
              "type": "number"
            },
            "rated_power_instant": {
              "description": "(instant backup) (unit: kW)",
              "format": "double",
              "type": "number"
            },
            "storage_capacity": {
              "format": "double",
              "type": "number"
            },
            "temp_setback": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "ElecStorageHeater",
              "type": "string"
            }
          },
          "required": [
            "ControlCharger",
            "EnergySupply",
            "Zone",
            "air_flow_type",
            "fan_pwr",
            "frac_convective",
            "n_units",
            "pwr_in",
            "rated_power_instant",
            "storage_capacity",
            "type",
            "ESH_max_output",
            "ESH_min_output"
          ],
          "title": "ElecStorageHeater",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Control": {
              "type": [
                "string",
                "null"
              ]
            },
            "EnergySupply": {
              "type": [
                "string",
                "null"
              ]
            },
            "HeatSource": {
              "$ref": "#/$defs/SpaceHeatSystemHeatSource"
            },
            "Zone": {
              "type": "string"
            },
            "advanced_start": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "bypass_percentage_recirculated": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "design_flow_rate": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "design_flow_temp": {
              "format": "int32",
              "type": "integer"
            },
            "ecodesign_controller": {
              "$ref": "#/$defs/EcoDesignController"
            },
            "emitters": {
              "items": {
                "$ref": "#/$defs/WetEmitter"
              },
              "type": "array"
            },
            "frac_convective": {
              "format": "double",
              "type": "number"
            },
            "max_flow_rate": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "min_flow_rate": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "n": {
              "format": "double",
              "type": "number"
            },
            "temp_diff_emit_dsgn": {
              "format": "double",
              "type": "number"
            },
            "temp_setback": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "thermal_mass": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "WetDistribution",
              "type": "string"
            },
            "variable_flow": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "wet_emitter_type": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "HeatSource",
            "Zone",
            "design_flow_temp",
            "ecodesign_controller",
            "temp_diff_emit_dsgn",
            "type"
          ],
          "title": "WetDistribution",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "Control": {
              "type": [
                "string",
                "null"
              ]
            },
            "HeatSource": {
              "$ref": "#/$defs/SpaceHeatSystemHeatSource"
            },
            "advanced_start": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "frac_convective": {
              "format": "double",
              "type": "number"
            },
            "temp_diff_emit_dsgn": {
              "format": "double",
              "type": "number"
            },
            "temp_setback": {
              "format": "double",
              "type": [
                "number",
                "null"
              ]
            },
            "type": {
              "const": "WarmAir",
              "type": "string"
            }
          },
          "required": [
            "HeatSource",
            "frac_convective",
            "temp_diff_emit_dsgn",
            "type"
          ],
          "title": "WarmAir",
          "type": "object"
        }
      ]
    },
    "SpaceHeatSystemHeatSource": {
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string"
        },
        "temp_flow_limit_upper": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "StorageTank": {
      "additionalProperties": false,
      "properties": {
        "ColdWaterSource": {
          "type": "string"
        },
        "Control_hold_at_setpnt": {
          "type": [
            "string",
            "null"
          ]
        },
        "HeatSource": {
          "additionalProperties": {
            "$ref": "#/$defs/HeatSource"
          },
          "type": "object"
        },
        "daily_losses": {
          "description": "Measured standby losses due to cylinder insulation at standardised conditions (unit: kWh/24h)",
          "format": "double",
          "type": "number"
        },
        "heat_exchanger_surface_area": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "init_temp": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "min_temp": {
          "description": "Minimum temperature required for domestic hot water (unit: ˚C)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "primary_pipework": {
          "items": {
            "$ref": "#/$defs/WaterPipework"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "setpoint_temp": {
          "description": "Setpoint temperature (unit: ˚C)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "type": {
          "const": "StorageTank",
          "type": "string"
        },
        "volume": {
          "description": "Total volume of tank (unit: litre)",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "ColdWaterSource",
        "HeatSource",
        "daily_losses",
        "type",
        "volume"
      ],
      "title": "StorageTank",
      "type": "object"
    },
    "StorageTankType": {
      "const": "hw cylinder",
      "type": "string"
    },
    "SupplyAirFlowRateControlType": {
      "enum": [
        "ODA",
        "LOAD"
      ],
      "type": "string"
    },
    "SupplyAirTemperatureControlType": {
      "enum": [
        "CONST",
        "NO_CTRL",
        "LOAD_COM"
      ],
      "type": "string"
    },
    "Tariff": {
      "additionalProperties": false,
      "properties": {
        "schedule": {
          "$ref": "#/$defs/Schedule_for_double"
        }
      },
      "required": [
        "schedule"
      ],
      "type": "object"
    },
    "TerrainClass": {
      "enum": [
        "OpenWater",
        "OpenField",
        "Suburban",
        "Urban"
      ],
      "type": "string"
    },
    "TestLetter": {
      "enum": [
        "A",
        "B",
        "C",
        "D",
        "F",
        "F2"
      ],
      "type": "string"
    },
    "ThermalBridging": {
      "anyOf": [
        {
          "additionalProperties": {
            "$ref": "#/$defs/ThermalBridgingDetails"
          },
          "type": "object"
        },
        {
          "format": "double",
          "type": "number"
        }
      ]
    },
    "ThermalBridgingDetails": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "junction_type": {
              "type": [
                "string",
                "null"
              ]
            },
            "length": {
              "format": "double",
              "type": "number"
            },
            "linear_thermal_transmittance": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "ThermalBridgeLinear",
              "type": "string"
            }
          },
          "required": [
            "length",
            "linear_thermal_transmittance",
            "type"
          ],
          "title": "ThermalBridgeLinear",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "heat_transfer_coeff": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "ThermalBridgePoint",
              "type": "string"
            }
          },
          "required": [
            "heat_transfer_coeff",
            "type"
          ],
          "title": "ThermalBridgePoint",
          "type": "object"
        }
      ]
    },
    "Vent": {
      "additionalProperties": false,
      "properties": {
        "area_cm2": {
          "format": "double",
          "type": "number"
        },
        "mid_height_air_flow_path": {
          "format": "double",
          "type": "number"
        },
        "orientation360": {
          "format": "double",
          "type": "number"
        },
        "pitch": {
          "format": "double",
          "type": "number"
        },
        "pressure_difference_ref": {
          "description": "Reference pressure difference for an air terminal device (unit: Pa)",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "area_cm2",
        "mid_height_air_flow_path",
        "orientation360",
        "pitch",
        "pressure_difference_ref"
      ],
      "type": "object"
    },
    "VentType": {
      "enum": [
        "Intermittent MEV",
        "Centralised continuous MEV",
        "Decentralised continuous MEV",
        "MVHR",
        "PIV"
      ],
      "type": "string"
    },
    "VentilationLeaks": {
      "additionalProperties": false,
      "properties": {
        "area_facades": {
          "description": "Surface area of facades (unit: m²)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "area_roof": {
          "description": "Surface area of the roof of the ventilation zone (unit: m²)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "env_area": {
          "description": "Reference area of the envelope airtightness index",
          "format": "double",
          "type": "number"
        },
        "test_pressure": {
          "description": "Reference pressure difference (unit: Pa)",
          "format": "double",
          "type": "number"
        },
        "test_result": {
          "description": "Flow rate through",
          "format": "double",
          "type": "number"
        },
        "ventilation_zone_height": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "env_area",
        "test_pressure",
        "test_result",
        "ventilation_zone_height"
      ],
      "type": "object"
    },
    "VentilationShieldClass": {
      "enum": [
        "Open",
        "Normal",
        "Shielded"
      ],
      "type": "string"
    },
    "WasteWaterHeatRecoveryDetails": {
      "additionalProperties": false,
      "properties": {
        "ColdWaterSource": {
          "$ref": "#/$defs/ColdWaterSourceType"
        },
        "efficiencies": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "electrical_consumption": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "flow_rates": {
          "items": {
            "format": "double",
            "type": "number"
          },
          "type": "array"
        },
        "type": {
          "$ref": "#/$defs/WwhrsType"
        },
        "utilisation_factor": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "ColdWaterSource",
        "efficiencies",
        "flow_rates",
        "type",
        "utilisation_factor"
      ],
      "type": "object"
    },
    "WaterHeatingEvent": {
      "additionalProperties": false,
      "properties": {
        "duration": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "start": {
          "format": "double",
          "type": "number"
        },
        "temperature": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "start",
        "temperature"
      ],
      "type": "object"
    },
    "WaterHeatingEvents": {
      "additionalProperties": {
        "additionalProperties": {
          "items": {
            "$ref": "#/$defs/WaterHeatingEvent"
          },
          "type": "array"
        },
        "type": "object"
      },
      "type": "object"
    },
    "WaterHeatingSchedule": {
      "enum": [
        "AllDay",
        "HeatingHours"
      ],
      "type": "string"
    },
    "WaterPipeContentsType": {
      "enum": [
        "water",
        "air",
        "glycol25"
      ],
      "type": "string"
    },
    "WaterPipework": {
      "additionalProperties": false,
      "properties": {
        "external_diameter_mm": {
          "format": "double",
          "type": "number"
        },
        "insulation_thermal_conductivity": {
          "format": "double",
          "type": "number"
        },
        "insulation_thickness_mm": {
          "format": "double",
          "type": "number"
        },
        "internal_diameter_mm": {
          "format": "double",
          "type": "number"
        },
        "length": {
          "format": "double",
          "type": "number"
        },
        "location": {
          "$ref": "#/$defs/WaterPipeworkLocation"
        },
        "pipe_contents": {
          "$ref": "#/$defs/WaterPipeContentsType"
        },
        "surface_reflectivity": {
          "type": "boolean"
        }
      },
      "required": [
        "external_diameter_mm",
        "insulation_thermal_conductivity",
        "insulation_thickness_mm",
        "internal_diameter_mm",
        "length",
        "location",
        "pipe_contents",
        "surface_reflectivity"
      ],
      "type": "object"
    },
    "WaterPipeworkLocation": {
      "enum": [
        "internal",
        "external"
      ],
      "type": "string"
    },
    "WaterPipeworkSimple": {
      "additionalProperties": false,
      "properties": {
        "external_diameter_mm": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "insulation_thermal_conductivity": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "insulation_thickness_mm": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "internal_diameter_mm": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "length": {
          "format": "double",
          "type": "number"
        },
        "location": {
          "$ref": "#/$defs/WaterPipeworkLocation"
        },
        "pipe_contents": {
          "anyOf": [
            {
              "$ref": "#/$defs/WaterPipeContentsType"
            },
            {
              "type": "null"
            }
          ]
        },
        "surface_reflectivity": {
          "type": [
            "boolean",
            "null"
          ]
        }
      },
      "required": [
        "length",
        "location"
      ],
      "type": "object"
    },
    "WetEmitter": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "c": {
              "format": "double",
              "type": "number"
            },
            "frac_convective": {
              "format": "double",
              "type": "number"
            },
            "n": {
              "format": "double",
              "type": "number"
            },
            "wet_emitter_type": {
              "const": "radiator",
              "type": "string"
            }
          },
          "required": [
            "c",
            "frac_convective",
            "n",
            "wet_emitter_type"
          ],
          "title": "radiator",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "emitter_floor_area": {
              "format": "double",
              "type": "number"
            },
            "equivalent_specific_thermal_mass": {
              "format": "double",
              "type": "number"
            },
            "frac_convective": {
              "format": "double",
              "type": "number"
            },
            "system_performance_factor": {
              "format": "double",
              "type": "number"
            },
            "wet_emitter_type": {
              "const": "ufh",
              "type": "string"
            }
          },
          "required": [
            "emitter_floor_area",
            "equivalent_specific_thermal_mass",
            "frac_convective",
            "system_performance_factor"
          ],
          "title": "ufh",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "fancoil_test_data": {
              "$ref": "#/$defs/FancoilTestData"
            },
            "frac_convective": {
              "format": "double",
              "type": "number"
            },
            "n_units": {
              "type": "integer"
            },
            "wet_emitter_type": {
              "const": "fancoil",
              "type": "string"
            }
          },
          "required": [
            "fancoil_test_data",
            "frac_convective",
            "n_units"
          ],
          "title": "fancoil",
          "type": "object"
        }
      ]
    },
    "WindShieldLocation": {
      "enum": [
        "Sheltered",
        "Average",
        "Exposed"
      ],
      "type": "string"
    },
    "WindowOpeningForCooling": {
      "additionalProperties": false,
      "properties": {
        "equivalent_area": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "equivalent_area"
      ],
      "type": "object"
    },
    "WindowPart": {
      "additionalProperties": false,
      "properties": {
        "mid_height_air_flow_path": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "mid_height_air_flow_path"
      ],
      "type": "object"
    },
    "WindowShadingObject": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "distance": {
              "format": "double",
              "type": "number"
            },
            "height": {
              "format": "double",
              "type": "number"
            },
            "transparency": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "const": "obstacle",
              "type": "string"
            }
          },
          "required": [
            "height",
            "distance",
            "transparency"
          ],
          "title": "obstacle",
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "depth": {
              "format": "double",
              "type": "number"
            },
            "distance": {
              "format": "double",
              "type": "number"
            },
            "type": {
              "enum": [
                "overhang",
                "sidefinright",
                "sidefinleft",
                "reveal"
              ],
              "type": "string"
            }
          },
          "required": [
            "depth",
            "distance"
          ],
          "title": "overhang/ sidefinright/ sidefinleft/ reveal",
          "type": "object"
        }
      ]
    },
    "WindowTreatment": {
      "additionalProperties": false,
      "properties": {
        "Control_closing_irrad": {
          "type": [
            "string",
            "null"
          ]
        },
        "Control_open": {
          "type": [
            "string",
            "null"
          ]
        },
        "Control_opening_irrad": {
          "type": [
            "string",
            "null"
          ]
        },
        "closing_irrad": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "controls": {
          "$ref": "#/$defs/WindowTreatmentControl"
        },
        "delta_r": {
          "format": "double",
          "type": "number"
        },
        "is_open": {
          "description": "This field should be a boolean - any string provided will be ignored and treated as a null.",
          "type": [
            "boolean",
            "string",
            "null"
          ]
        },
        "opening_delay_hrs": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "opening_irrad": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "trans_red": {
          "format": "double",
          "type": "number"
        },
        "type": {
          "$ref": "#/$defs/WindowTreatmentType"
        },
        "waking_hour": {
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "required": [
        "controls",
        "delta_r",
        "trans_red",
        "type"
      ],
      "type": "object"
    },
    "WindowTreatmentControl": {
      "enum": [
        "auto_motorised",
        "combined_light_blind_HVAC",
        "manual",
        "manual_motorised"
      ],
      "type": "string"
    },
    "WindowTreatmentType": {
      "enum": [
        "blinds",
        "curtains"
      ],
      "type": "string"
    },
    "WwhrsType": {
      "enum": [
        "WWHRS_InstantaneousSystemA",
        "WWHRS_InstantaneousSystemB",
        "WWHRS_InstantaneousSystemC"
      ],
      "type": "string"
    },
    "ZoneInput": {
      "additionalProperties": false,
      "properties": {
        "BuildingElement": {
          "additionalProperties": {
            "$ref": "#/$defs/BuildingElement"
          },
          "type": "object"
        },
        "Control_WindowOpening": {
          "anyOf": [
            {
              "$ref": "#/$defs/HeatSourceControlType"
            },
            {
              "type": "null"
            }
          ]
        },
        "Lighting": {
          "anyOf": [
            {
              "$ref": "#/$defs/ZoneLighting"
            },
            {
              "type": "null"
            }
          ]
        },
        "SpaceCoolSystem": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "SpaceHeatControl": {
          "anyOf": [
            {
              "$ref": "#/$defs/SpaceHeatControlType"
            },
            {
              "type": "null"
            }
          ]
        },
        "SpaceHeatSystem": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "ThermalBridging": {
          "$ref": "#/$defs/ThermalBridging"
        },
        "area": {
          "description": "Useful floor area of the zone (unit: m²)",
          "format": "double",
          "type": "number"
        },
        "temp_setpnt_basis": {
          "anyOf": [
            {
              "$ref": "#/$defs/ZoneTemperatureControlBasis"
            },
            {
              "type": "null"
            }
          ]
        },
        "temp_setpnt_cool": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "temp_setpnt_heat": {
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "temp_setpnt_init": {
          "description": "Setpoint temperature to use during initialisation (unit: ˚C)",
          "format": "double",
          "type": [
            "number",
            "null"
          ]
        },
        "volume": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "BuildingElement",
        "ThermalBridging",
        "area",
        "volume"
      ],
      "type": "object"
    },
    "ZoneLighting": {
      "additionalProperties": false,
      "properties": {
        "bulbs": {
          "additionalProperties": {
            "$ref": "#/$defs/ZoneLightingBulbs"
          },
          "type": "object"
        },
        "efficacy": {
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "efficacy"
      ],
      "type": "object"
    },
    "ZoneLightingBulbs": {
      "properties": {
        "count": {
          "description": "The number of bulbs present.",
          "format": "int32",
          "minimum": 0,
          "type": "integer"
        },
        "efficacy": {
          "format": "double",
          "type": "number"
        },
        "power": {
          "format": "double",
          "minimum": 0.0,
          "type": "number"
        }
      },
      "required": [
        "count",
        "efficacy",
        "power"
      ],
      "type": "object"
    },
    "ZoneTemperatureControlBasis": {
      "enum": [
        "air",
        "operative"
      ],
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema#",
  "additionalProperties": false,
  "properties": {
    "ApplianceGains": {
      "additionalProperties": {
        "$ref": "#/$defs/ApplianceGainsDetails"
      },
      "type": "object"
    },
    "Appliances": {
      "additionalProperties": {
        "$ref": "#/$defs/ApplianceEntry"
      },
      "type": [
        "object",
        "null"
      ]
    },
    "ColdWaterSource": {
      "$ref": "#/$defs/ColdWaterSourceInput"
    },
    "Control": {
      "$ref": "#/$defs/Control"
    },
    "EnergySupply": {
      "additionalProperties": {
        "$ref": "#/$defs/EnergySupplyDetails"
      },
      "type": "object"
    },
    "Events": {
      "$ref": "#/$defs/WaterHeatingEvents"
    },
    "ExternalConditions": {
      "$ref": "#/$defs/ExternalConditionsInput"
    },
    "General": {
      "$ref": "#/$defs/General"
    },
    "GroundFloorArea": {
      "description": "For a house, the area of the ground floor (unit: m²)",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "HeatSourceWet": {
      "additionalProperties": {
        "$ref": "#/$defs/HeatSourceWetDetails"
      },
      "type": [
        "object",
        "null"
      ]
    },
    "HeatingControlType": {
      "anyOf": [
        {
          "$ref": "#/$defs/HeatingControlType"
        },
        {
          "type": "null"
        }
      ]
    },
    "HotWaterDemand": {
      "$ref": "#/$defs/HotWaterDemand"
    },
    "HotWaterSource": {
      "$ref": "#/$defs/HotWaterSource"
    },
    "InfiltrationVentilation": {
      "$ref": "#/$defs/InfiltrationVentilation"
    },
    "InternalGains": {
      "$ref": "#/$defs/InternalGains"
    },
    "NumberOfBedrooms": {
      "format": "int32",
      "minimum": 0.0,
      "type": [
        "integer",
        "null"
      ]
    },
    "NumberOfWetRooms": {
      "format": "int32",
      "minimum": 0.0,
      "type": [
        "integer",
        "null"
      ]
    },
    "OnSiteGeneration": {
      "additionalProperties": {
        "$ref": "#/$defs/OnSiteGenerationDetails"
      },
      "type": [
        "object",
        "null"
      ]
    },
    "PartGcompliance": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "PartO_active_cooling_required": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "PreHeatedWaterSource": {
      "anyOf": [
        {
          "additionalProperties": {
            "$ref": "#/$defs/StorageTank"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ]
    },
    "SimulationTime": {
      "$ref": "#/$defs/SimulationTime"
    },
    "SmartApplianceControls": {
      "additionalProperties": {
        "$ref": "#/$defs/SmartApplianceControlDetails"
      },
      "type": "object"
    },
    "SpaceCoolSystem": {
      "additionalProperties": {
        "$ref": "#/$defs/SpaceCoolSystemDetails"
      },
      "type": [
        "object",
        "null"
      ]
    },
    "SpaceHeatSystem": {
      "additionalProperties": {
        "$ref": "#/$defs/SpaceHeatSystemDetails"
      },
      "type": [
        "object",
        "null"
      ]
    },
    "Tariff": {
      "anyOf": [
        {
          "$ref": "#/$defs/Tariff"
        },
        {
          "type": "null"
        }
      ]
    },
    "WWHRS": {
      "additionalProperties": {
        "$ref": "#/$defs/WasteWaterHeatRecoveryDetails"
      },
      "type": [
        "object",
        "null"
      ]
    },
    "WaterHeatSchedDefault": {
      "anyOf": [
        {
          "$ref": "#/$defs/WaterHeatingSchedule"
        },
        {
          "type": "null"
        }
      ]
    },
    "Window_Opening_For_Cooling": {
      "anyOf": [
        {
          "$ref": "#/$defs/WindowOpeningForCooling"
        },
        {
          "type": "null"
        }
      ]
    },
    "Zone": {
      "additionalProperties": {
        "$ref": "#/$defs/ZoneInput"
      },
      "type": "object"
    },
    "temp_internal_air_static_calcs": {
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    }
  },
  "required": [
    "ColdWaterSource",
    "Control",
    "EnergySupply",
    "Events",
    "ExternalConditions",
    "General",
    "HotWaterDemand",
    "HotWaterSource",
    "InfiltrationVentilation",
    "InternalGains",
    "SimulationTime",
    "Zone"
  ],
  "title": "Input",
  "type": "object"
}