{
    "general": {
      "name": {
        "default": "Machine Group Configuration",
        "rules": {
          "type": "string",
          "description": "A human-readable name or label for this machine group configuration."
        }
      },
      "id": {
        "default": null,
        "rules": {
          "type": "string",
          "nullable": true,
          "description": "A unique identifier for this configuration. If not provided, defaults to null."
        }
      },
        "unit": {
        "default": "m3/h",
        "rules": {
          "type": "string",
          "description": "The default measurement unit for this configuration (e.g., 'meters', 'seconds', 'unitless')."
        }
      },
      "logging": {
        "logLevel": {
          "default": "info",
          "rules": {
            "type": "enum",
            "values": [
              {
                "value": "debug",
                "description": "Log messages are printed for debugging purposes."
              },
              {
                "value": "info",
                "description": "Informational messages are printed."
              },
              {
                "value": "warn",
                "description": "Warning messages are printed."
              },
              {
                "value": "error",
                "description": "Error messages are printed."
              }
            ]
          }
        },
        "enabled": {
          "default": true,
          "rules": {
            "type": "boolean",
            "description": "Indicates whether logging is active. If true, log messages will be generated."
          }
        }
      }
    },
    "functionality": {
      "softwareType": {
        "default": "machineGroup",
        "rules": {
          "type": "string",
          "description": "Logical name identifying the software type."
        }
      },
      "role": {
        "default": "GroupController",
        "rules": {
          "type": "string",
          "description": "Controls a group of machines within the system."
        }
      },
      "positionVsParent":{
            "default":"atEquipment",
            "rules": {
                "type": "enum",
                "values": [
                    {
                        "value": "atEquipment",
                        "description": "The node is connected at the equipment level and is responsible for controlling or monitoring the equipment as a whole."
                    },
                    {
                        "value": "upstream",
                        "description": "The node is connected in a downstream position, indicating it is responsible for monitoring or controlling processes that occur after the equipment's operation, such as product flow or output."
                    },
                    {
                        "value": "downstream",
                        "description": "The node is connected in an upstream position, indicating it is responsible for monitoring or controlling processes that occur before the equipment's operation, such as input flow or supply."
                    }
                ],
                "description": "Defines the position of the measurement relative to its parent equipment or system."
            }
        }
    },
    "mode": {
        "current": {
          "default": "optimalControl",
          "rules": {
            "type": "enum",
            "values": [
              {
                "value": "optimalControl",
                "description": "The group controller selects the most optimal combination of machines based on their real-time performance curves."
              },
              {
                "value": "priorityControl",
                "description": "Machines are controlled sequentially from minimum to maximum output until each is maxed out, then additional machines are added."
              },
              {
                "value": "prioritypercentagecontrol",
                "description": "Machines are controlled sequentially from minimum to maximum output until each is maxed out, then additional machines are added based on a percentage of the total demand."
              },
              {
                "value": "maintenance",
                "description": "The group is in maintenance mode with limited actions (monitoring only)."
              }
            ],
            "description": "The operational mode of the machine group controller."
          }
        },
        "allowedActions": {
          "default": {},
          "rules": {
            "type": "object",
            "schema": {
              "optimalControl": {
                "default": ["statusCheck", "execOptimalCombination", "balanceLoad", "emergencyStop"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Actions allowed in optimalControl mode."
                }
              },
              "priorityControl": {
                "default": ["statusCheck", "execSequentialControl", "balanceLoad", "emergencyStop"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Actions allowed in priorityControl mode."
                }
              },
              "prioritypercentagecontrol": {
                "default": ["statusCheck", "execSequentialControl", "balanceLoad", "emergencyStop"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Actions allowed in manualOverride mode."
                }
              },
              "maintenance": {
                "default": ["statusCheck"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Actions allowed in maintenance mode."
                }
              }
            },
            "description": "Defines the actions available for each operational mode of the machine group controller."
          }
        },
        "allowedSources": {
          "default": {},
          "rules": {
            "type": "object",
            "schema": {
              "optimalcontrol": {
                "default": ["parent", "GUI", "physical", "API"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Command sources allowed in optimalControl mode."
                }
              },
              "prioritycontrol": {
                "default": ["parent", "GUI", "physical", "API"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Command sources allowed in priorityControl mode."
                }
              },
              "prioritypercentagecontrol": {
                "default": ["parent", "GUI", "physical", "API"],
                "rules": {
                  "type": "set",
                  "itemType": "string",
                  "description": "Command sources allowed "
                }
              }
            },
            "description": "Specifies the valid command sources recognized by the machine group controller for each mode."
          }
        }
    },
    "scaling": {
      "current": {
        "default": "normalized",
        "rules": {
          "type": "enum",
          "values": [
            {
              "value": "normalized",
              "description": "Scales the demand between 0–100% of the total flow capacity, interpolating to calculate the effective demand."
            },
            {
              "value": "absolute",
              "description": "Uses the absolute demand value directly, capped between the min and max machine flow capacities."
            }
          ],
          "description": "The scaling mode for demand calculations."
        }
      }
    }
  }
