{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/elhub/main/json-schema/elhub-controllable-unit-history-response-schema.json",
  "title": "controllable_unit_history_response",
  "description": "Controllable unit - history",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/elhub-flex-information-system-main-api-openapi.yml#/components/schemas/controllable_unit_history_response",
  "summary": "Controllable unit - history",
  "properties": {
    "id": {
      "description": "Unique surrogate key.",
      "format": "bigint",
      "type": "integer",
      "readOnly": true
    },
    "business_id": {
      "description": "Unique business identifier for the controllable unit.",
      "format": "text",
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
      "readOnly": true
    },
    "name": {
      "description": "Free text name of the controllable unit.",
      "format": "text",
      "type": "string",
      "maxLength": 512
    },
    "start_date": {
      "description": "The usage date when the controllable unit is first active.",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "$ref": "#/$defs/controllable_unit_status",
      "default": "new"
    },
    "regulation_direction": {
      "$ref": "#/$defs/controllable_unit_regulation_direction"
    },
    "maximum_active_power": {
      "description": "Maximum continuous active power (flexible power) that the controllable unit can produce or consume, i.e. deliver for balancing and congestion services, in kilowatts.",
      "format": "decimal",
      "type": "number",
      "minimum": 0,
      "maximum": 999999.999,
      "multipleOf": 0.001
    },
    "is_small": {
      "description": "Whether the controllable unit is small or not, following NCDR. Current threshold for this to be true is <= 50 kW of flexible power.",
      "format": "boolean",
      "type": "boolean",
      "readOnly": true
    },
    "accounting_point_id": {
      "description": "Reference to the accounting point that the controllable unit is connected to.",
      "format": "bigint",
      "type": "integer",
      "nullable": false
    },
    "additional_information": {
      "description": "Free text field for extra information about the controllable unit if needed.",
      "format": "text",
      "type": [
        "string",
        "null"
      ]
    },
    "recorded_at": {
      "description": "When the resource was recorded (created or updated) in the system.",
      "format": "date-time",
      "type": "string",
      "readOnly": true
    },
    "recorded_by": {
      "description": "The identity that recorded the resource.",
      "format": "bigint",
      "type": "integer",
      "readOnly": true
    },
    "controllable_unit_id": {
      "description": "Reference to the resource that was updated.",
      "format": "bigint",
      "type": "integer"
    },
    "replaced_by": {
      "description": "The identity that updated the resource when it was replaced.",
      "format": "bigint",
      "type": [
        "integer",
        "null"
      ]
    },
    "replaced_at": {
      "description": "When the resource was replaced in the system.",
      "format": "date-time",
      "type": [
        "string",
        "null"
      ]
    },
    "suspension_history": {
      "description": "Embedded controllable_unit_suspension_history",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/controllable_unit_suspension_history_response"
          }
        },
        {
          "type": "null"
        }
      ],
      "nullable": true
    },
    "service_provider_history": {
      "description": "Embedded controllable_unit_service_provider_history",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/controllable_unit_service_provider_history_response"
          }
        },
        {
          "type": "null"
        }
      ],
      "nullable": true
    },
    "service_providing_group_membership_history": {
      "description": "Embedded service_providing_group_membership_history",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/service_providing_group_membership_history_response"
          }
        },
        {
          "type": "null"
        }
      ],
      "nullable": true
    },
    "technical_resource_history": {
      "description": "Embedded technical_resource_history",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/technical_resource_history_response"
          }
        },
        {
          "type": "null"
        }
      ],
      "nullable": true
    }
  },
  "required": [
    "id",
    "business_id",
    "name",
    "status",
    "regulation_direction",
    "maximum_active_power",
    "is_small",
    "accounting_point_id",
    "recorded_at",
    "recorded_by",
    "controllable_unit_id"
  ],
  "$defs": {
    "category": {
      "description": "Resource category classification. Derived from technologies.",
      "format": "text",
      "type": "string",
      "enum": [
        "consumption",
        "production",
        "energy_storage"
      ]
    },
    "controllable_unit_history_response": {
      "summary": "Controllable unit - history",
      "description": "Controllable unit - history",
      "properties": {
        "id": {
          "description": "Unique surrogate key.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "business_id": {
          "description": "Unique business identifier for the controllable unit.",
          "format": "text",
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
          "readOnly": true
        },
        "name": {
          "description": "Free text name of the controllable unit.",
          "format": "text",
          "type": "string",
          "maxLength": 512
        },
        "start_date": {
          "description": "The usage date when the controllable unit is first active.",
          "format": "date",
          "type": [
            "string",
            "null"
          ]
        },
        "status": {
          "$ref": "#/$defs/controllable_unit_status",
          "default": "new"
        },
        "regulation_direction": {
          "$ref": "#/$defs/controllable_unit_regulation_direction"
        },
        "maximum_active_power": {
          "description": "Maximum continuous active power (flexible power) that the controllable unit can produce or consume, i.e. deliver for balancing and congestion services, in kilowatts.",
          "format": "decimal",
          "type": "number",
          "minimum": 0,
          "maximum": 999999.999,
          "multipleOf": 0.001
        },
        "is_small": {
          "description": "Whether the controllable unit is small or not, following NCDR. Current threshold for this to be true is <= 50 kW of flexible power.",
          "format": "boolean",
          "type": "boolean",
          "readOnly": true
        },
        "accounting_point_id": {
          "description": "Reference to the accounting point that the controllable unit is connected to.",
          "format": "bigint",
          "type": "integer",
          "nullable": false
        },
        "additional_information": {
          "description": "Free text field for extra information about the controllable unit if needed.",
          "format": "text",
          "type": [
            "string",
            "null"
          ]
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "suspension_history": {
          "description": "Embedded controllable_unit_suspension_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_suspension_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "service_provider_history": {
          "description": "Embedded controllable_unit_service_provider_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_service_provider_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "service_providing_group_membership_history": {
          "description": "Embedded service_providing_group_membership_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_membership_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "technical_resource_history": {
          "description": "Embedded technical_resource_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/technical_resource_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "business_id",
        "name",
        "status",
        "regulation_direction",
        "maximum_active_power",
        "is_small",
        "accounting_point_id",
        "recorded_at",
        "recorded_by",
        "controllable_unit_id"
      ]
    },
    "controllable_unit_regulation_direction": {
      "description": "The regulation direction of the controllable unit. `up` means it can be used to increase production or decrease consumption, while `down` means to decrease production or increase consumption.",
      "format": "text",
      "type": "string",
      "enum": [
        "up",
        "down",
        "both"
      ]
    },
    "controllable_unit_service_provider_history_response": {
      "summary": "Relation between controllable unit and service provider - history",
      "description": "Relation between controllable unit and service provider - history",
      "properties": {
        "id": {
          "description": "Unique surrogate key.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_id": {
          "description": "Reference to the controllable unit this relation links to a service provider.",
          "format": "bigint",
          "type": "integer"
        },
        "service_provider_id": {
          "description": "Reference to the `party` (service provider) this relation links to a controllable unit.",
          "format": "bigint",
          "type": "integer"
        },
        "end_user_id": {
          "description": "Technical ID of the end user behind the accounting point.",
          "format": "bigint",
          "type": "integer"
        },
        "contract_reference": {
          "description": "The service providers internal reference to the contract with the end user. Typically an internal identifier to a stored document or consent record.",
          "format": "text",
          "type": "string",
          "maxLength": 128,
          "nullable": false
        },
        "valid_from": {
          "description": "The date from which the relation between the controllable unit and the service provider is valid. Midnight aligned on Norwegian timezone.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "valid_to": {
          "description": "The date until which the relation between the controllable unit and the service provider is valid. Midnight aligned on Norwegian timezone.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_service_provider_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "controllable_unit_history": {
          "description": "Embedded controllable_unit_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "service_provider_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "end_user_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "controllable_unit_id",
        "service_provider_id",
        "end_user_id",
        "contract_reference",
        "recorded_at",
        "recorded_by",
        "controllable_unit_service_provider_id"
      ]
    },
    "controllable_unit_status": {
      "description": "The status of the controllable unit.",
      "format": "text",
      "type": "string",
      "default": "new",
      "enum": [
        "new",
        "active",
        "inactive",
        "terminated"
      ]
    },
    "controllable_unit_suspension_comment_history_response": {
      "summary": "Controllable Unit Suspension Comment - history",
      "description": "Controllable Unit Suspension Comment - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_suspension_id": {
          "description": "Reference to the controllable unit suspension.",
          "format": "bigint",
          "type": "integer"
        },
        "created_by": {
          "description": "Reference to the identity that created the comment.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "created_at": {
          "description": "When the comment was added to the CUS.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "visibility": {
          "$ref": "#/$defs/controllable_unit_suspension_comment_visibility",
          "default": "same_party"
        },
        "content": {
          "description": "Free text content of the comment.",
          "format": "text",
          "type": "string",
          "maxLength": 2048
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_suspension_comment_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "controllable_unit_suspension_history": {
          "description": "Embedded controllable_unit_suspension_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_suspension_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "controllable_unit_suspension_id",
        "created_by",
        "created_at",
        "visibility",
        "content",
        "recorded_at",
        "recorded_by",
        "controllable_unit_suspension_comment_id"
      ]
    },
    "controllable_unit_suspension_comment_visibility": {
      "description": "The level of visibility of the comment.",
      "format": "text",
      "type": "string",
      "default": "same_party",
      "enum": [
        "same_party",
        "any_involved_party"
      ]
    },
    "controllable_unit_suspension_history_response": {
      "summary": "Controllable Unit Suspension - history",
      "description": "Controllable Unit Suspension - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_id": {
          "description": "Reference to the suspended controllable unit.",
          "format": "bigint",
          "type": "integer"
        },
        "impacted_system_operator_id": {
          "description": "Reference to the impacted system operator suspending the controllable unit.",
          "format": "bigint",
          "type": "integer"
        },
        "reason": {
          "$ref": "#/$defs/controllable_unit_suspension_reason"
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_suspension_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "controllable_unit_history": {
          "description": "Embedded controllable_unit_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "impacted_system_operator_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "comment_history": {
          "description": "Embedded controllable_unit_suspension_comment_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_suspension_comment_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "controllable_unit_id",
        "impacted_system_operator_id",
        "reason",
        "recorded_at",
        "recorded_by",
        "controllable_unit_suspension_id"
      ]
    },
    "controllable_unit_suspension_reason": {
      "description": "The reason for the suspension.",
      "format": "text",
      "type": "string",
      "enum": [
        "compromises_safe_operation",
        "other"
      ]
    },
    "device_type": {
      "description": "Type of device for technical resources.",
      "format": "text",
      "type": "string",
      "enum": [
        "inverter",
        "boiler",
        "water_heater",
        "socket",
        "hvac",
        "ev_charging_device",
        "energy_management_system",
        "other"
      ]
    },
    "party_business_id_type": {
      "description": "The type of the business identifier.",
      "format": "text",
      "type": "string",
      "default": "uuid",
      "enum": [
        "gln",
        "uuid",
        "eic_x",
        "org"
      ]
    },
    "party_history_response": {
      "summary": "Party - history",
      "description": "Party - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "business_id": {
          "description": "The business identifier of the party. Format depends on `business_id_type`.",
          "format": "text",
          "type": "string"
        },
        "business_id_type": {
          "$ref": "#/$defs/party_business_id_type",
          "default": "uuid"
        },
        "entity_id": {
          "description": "Reference to the entity that is the parent of the party.",
          "format": "bigint",
          "type": "integer"
        },
        "name": {
          "description": "Name of the party. Maximum 128 characters.",
          "format": "text",
          "type": "string"
        },
        "role": {
          "$ref": "#/$defs/party_role"
        },
        "type": {
          "$ref": "#/$defs/party_type"
        },
        "status": {
          "$ref": "#/$defs/party_status",
          "default": "new"
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "party_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "business_id",
        "business_id_type",
        "entity_id",
        "name",
        "role",
        "type",
        "status",
        "recorded_at",
        "recorded_by",
        "party_id"
      ]
    },
    "party_role": {
      "description": "The role of the party. Currently maps to 1:1 to `type`. E.g. system_operator, service_provider.",
      "format": "text",
      "type": "string",
      "enum": [
        "flex_balance_responsible_party",
        "flex_end_user",
        "flex_energy_supplier",
        "flex_flexibility_information_system_operator",
        "flex_market_operator",
        "flex_organisation",
        "flex_service_provider",
        "flex_system_operator",
        "flex_third_party"
      ]
    },
    "party_status": {
      "description": "The status of the party.",
      "format": "text",
      "type": "string",
      "default": "new",
      "enum": [
        "new",
        "active",
        "inactive",
        "suspended",
        "terminated"
      ]
    },
    "party_type": {
      "description": "The type of the party, e.g SystemOperator, ServiceProvider",
      "format": "text",
      "type": "string",
      "enum": [
        "balance_responsible_party",
        "end_user",
        "energy_supplier",
        "flexibility_information_system_operator",
        "market_operator",
        "organisation",
        "service_provider",
        "system_operator",
        "third_party"
      ]
    },
    "service_providing_group_bidding_zone": {
      "description": "The bidding zone that restricts which CUs that can be added to the group. Also known as scheduling area or price area for TSO.",
      "format": "text",
      "type": "string",
      "enum": [
        "NO1",
        "NO2",
        "NO3",
        "NO4",
        "NO5"
      ]
    },
    "service_providing_group_grid_prequalification_comment_history_response": {
      "summary": "Grid prequalification for service providing group Comment - history",
      "description": "Grid prequalification for service providing group Comment - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_grid_prequalification_id": {
          "description": "Reference to the service providing group grid prequalification.",
          "format": "bigint",
          "type": "integer"
        },
        "created_by": {
          "description": "Reference to the identity that created the comment.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "created_at": {
          "description": "When the comment was added to the SPGGP.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "visibility": {
          "$ref": "#/$defs/service_providing_group_grid_prequalification_comment_visibility",
          "default": "same_party"
        },
        "content": {
          "description": "Free text content of the comment.",
          "format": "text",
          "type": "string",
          "maxLength": 2048
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_grid_prequalification_comment_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_grid_prequalification_history": {
          "description": "Embedded service_providing_group_grid_prequalification_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_grid_prequalification_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_grid_prequalification_id",
        "created_by",
        "created_at",
        "visibility",
        "content",
        "recorded_at",
        "recorded_by",
        "service_providing_group_grid_prequalification_comment_id"
      ]
    },
    "service_providing_group_grid_prequalification_comment_visibility": {
      "description": "The level of visibility of the comment.",
      "format": "text",
      "type": "string",
      "default": "same_party",
      "enum": [
        "same_party",
        "any_involved_party"
      ]
    },
    "service_providing_group_grid_prequalification_history_response": {
      "summary": "Grid prequalification for service providing group - history",
      "description": "Grid prequalification for service providing group - history",
      "properties": {
        "id": {
          "description": "Unique surrogate key.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_id": {
          "description": "Reference to the service providing group whose grid prequalification is tracked by the current resource.",
          "format": "bigint",
          "type": "integer"
        },
        "impacted_system_operator_id": {
          "description": "Reference to the `party` that is the impacted system operator.",
          "format": "bigint",
          "type": "integer"
        },
        "status": {
          "$ref": "#/$defs/service_providing_group_grid_prequalification_status",
          "default": "requested"
        },
        "prequalified_at": {
          "description": "When the current grid prequalification was last approved.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_grid_prequalification_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_history": {
          "description": "Embedded service_providing_group_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "impacted_system_operator_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "comment_history": {
          "description": "Embedded service_providing_group_grid_prequalification_comment_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_grid_prequalification_comment_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_id",
        "impacted_system_operator_id",
        "status",
        "recorded_at",
        "recorded_by",
        "service_providing_group_grid_prequalification_id"
      ]
    },
    "service_providing_group_grid_prequalification_status": {
      "description": "The status of the grid prequalification for this service providing group.",
      "format": "text",
      "type": "string",
      "default": "requested",
      "enum": [
        "requested",
        "in_progress",
        "conditionally_approved",
        "approved",
        "not_approved"
      ]
    },
    "service_providing_group_grid_suspension_comment_history_response": {
      "summary": "Service Providing Group Grid Suspension Comment - history",
      "description": "Service Providing Group Grid Suspension Comment - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_grid_suspension_id": {
          "description": "Reference to the service providing group grid suspension.",
          "format": "bigint",
          "type": "integer"
        },
        "created_by": {
          "description": "Reference to the identity that created the comment.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "created_at": {
          "description": "When the comment was added to the SPGGS.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "visibility": {
          "$ref": "#/$defs/service_providing_group_grid_suspension_comment_visibility",
          "default": "same_party"
        },
        "content": {
          "description": "Free text content of the comment.",
          "format": "text",
          "type": "string",
          "maxLength": 2048
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_grid_suspension_comment_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_grid_suspension_history": {
          "description": "Embedded service_providing_group_grid_suspension_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_grid_suspension_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_grid_suspension_id",
        "created_by",
        "created_at",
        "visibility",
        "content",
        "recorded_at",
        "recorded_by",
        "service_providing_group_grid_suspension_comment_id"
      ]
    },
    "service_providing_group_grid_suspension_comment_visibility": {
      "description": "The level of visibility of the comment.",
      "format": "text",
      "type": "string",
      "default": "same_party",
      "enum": [
        "same_party",
        "any_involved_party"
      ]
    },
    "service_providing_group_grid_suspension_history_response": {
      "summary": "Service Providing Group Grid Suspension - history",
      "description": "Service Providing Group Grid Suspension - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "impacted_system_operator_id": {
          "description": "Reference to the impacted system operator suspending the service providing group.",
          "format": "bigint",
          "type": "integer"
        },
        "service_providing_group_id": {
          "description": "Reference to the service providing group being suspended.",
          "format": "bigint",
          "type": "integer"
        },
        "reason": {
          "$ref": "#/$defs/service_providing_group_grid_suspension_reason"
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_grid_suspension_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "impacted_system_operator_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "service_providing_group_history": {
          "description": "Embedded service_providing_group_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "comment_history": {
          "description": "Embedded service_providing_group_grid_suspension_comment_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_grid_suspension_comment_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "impacted_system_operator_id",
        "service_providing_group_id",
        "reason",
        "recorded_at",
        "recorded_by",
        "service_providing_group_grid_suspension_id"
      ]
    },
    "service_providing_group_grid_suspension_reason": {
      "description": "The reason for the suspension.",
      "format": "text",
      "type": "string",
      "enum": [
        "breach_of_conditions",
        "significant_group_change",
        "other"
      ]
    },
    "service_providing_group_history_response": {
      "summary": "Service providing group - history",
      "description": "Service providing group - history",
      "properties": {
        "id": {
          "description": "Unique surrogate key.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "name": {
          "description": "Free text name of the service providing group.",
          "format": "text",
          "type": "string",
          "maxLength": 128
        },
        "service_provider_id": {
          "description": "Reference to the `party` (service provider) managing the group.",
          "format": "bigint",
          "type": "integer"
        },
        "bidding_zone": {
          "$ref": "#/$defs/service_providing_group_bidding_zone"
        },
        "status": {
          "$ref": "#/$defs/service_providing_group_status",
          "default": "new"
        },
        "additional_information": {
          "description": "Free text field for extra information about the service providing group if needed.",
          "format": "text",
          "type": [
            "string",
            "null"
          ]
        },
        "created_at": {
          "description": "When the service providing group was first created.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_provider_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "membership_history": {
          "description": "Embedded service_providing_group_membership_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_membership_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "grid_prequalification_history": {
          "description": "Embedded service_providing_group_grid_prequalification_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_grid_prequalification_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "grid_suspension_history": {
          "description": "Embedded service_providing_group_grid_suspension_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_grid_suspension_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "product_application_history": {
          "description": "Embedded service_providing_group_product_application_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_application_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "product_suspension_history": {
          "description": "Embedded service_providing_group_product_suspension_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_suspension_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "name",
        "service_provider_id",
        "bidding_zone",
        "status",
        "created_at",
        "recorded_at",
        "recorded_by",
        "service_providing_group_id"
      ]
    },
    "service_providing_group_membership_history_response": {
      "summary": "Membership relation of controllable unit in service providing group - history",
      "description": "Membership relation of controllable unit in service providing group - history",
      "properties": {
        "id": {
          "description": "Unique surrogate key.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "controllable_unit_id": {
          "description": "Reference to the controllable unit this relation links to a service providing group.",
          "format": "bigint",
          "type": "integer"
        },
        "service_providing_group_id": {
          "description": "Reference to the service providing group this relation links to a controllable unit.",
          "format": "bigint",
          "type": "integer"
        },
        "valid_from": {
          "description": "The date from which the relation between the controllable unit and the service providing group is valid. Midnight aligned on Norwegian timezone.",
          "format": "date-time",
          "type": "string"
        },
        "valid_to": {
          "description": "The date until which the relation between the controllable unit and the service providing group is valid. Midnight aligned on Norwegian timezone.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_membership_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "controllable_unit_history": {
          "description": "Embedded controllable_unit_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "service_providing_group_history": {
          "description": "Embedded service_providing_group_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "controllable_unit_id",
        "service_providing_group_id",
        "valid_from",
        "recorded_at",
        "recorded_by",
        "service_providing_group_membership_id"
      ]
    },
    "service_providing_group_product_application_attachment_content_type": {
      "description": "MIME type of the attachment.",
      "format": "text",
      "type": "string",
      "enum": [
        "application/pdf",
        "image/jpeg",
        "image/png"
      ]
    },
    "service_providing_group_product_application_attachment_history_response": {
      "summary": "Service Providing Group Product Application Attachment - history",
      "description": "Service Providing Group Product Application Attachment - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_application_id": {
          "description": "Reference to the service providing group product application.",
          "format": "bigint",
          "type": "integer"
        },
        "object_id": {
          "description": "Identifier of the object to which the attachment is linked.",
          "format": "text",
          "type": "string"
        },
        "filename": {
          "description": "Original filename of the attachment.",
          "format": "text",
          "type": "string"
        },
        "filename_sanitised": {
          "description": "Sanitised filename safe for storage.",
          "format": "text",
          "type": "string"
        },
        "content_type": {
          "$ref": "#/$defs/service_providing_group_product_application_attachment_content_type"
        },
        "size_bytes": {
          "description": "Size of the attachment in bytes.",
          "format": "bigint",
          "type": "integer"
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_application_attachment_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_product_application_history": {
          "description": "Embedded service_providing_group_product_application_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_application_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_product_application_id",
        "object_id",
        "filename",
        "filename_sanitised",
        "content_type",
        "size_bytes",
        "recorded_at",
        "recorded_by",
        "service_providing_group_product_application_attachment_id"
      ]
    },
    "service_providing_group_product_application_comment_history_response": {
      "summary": "Service Providing Group Product Application Comment - history",
      "description": "Service Providing Group Product Application Comment - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_application_id": {
          "description": "Reference to the service providing group product application.",
          "format": "bigint",
          "type": "integer"
        },
        "created_by": {
          "description": "Reference to the identity that created the comment.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "created_at": {
          "description": "When the comment was added to the SPGPA.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "visibility": {
          "$ref": "#/$defs/service_providing_group_product_application_comment_visibility",
          "default": "same_party"
        },
        "content": {
          "description": "Free text content of the comment.",
          "format": "text",
          "type": "string",
          "maxLength": 2048
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_application_comment_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_product_application_history": {
          "description": "Embedded service_providing_group_product_application_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_application_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_product_application_id",
        "created_by",
        "created_at",
        "visibility",
        "content",
        "recorded_at",
        "recorded_by",
        "service_providing_group_product_application_comment_id"
      ]
    },
    "service_providing_group_product_application_comment_visibility": {
      "description": "The level of visibility of the comment.",
      "format": "text",
      "type": "string",
      "default": "same_party",
      "enum": [
        "same_party",
        "any_involved_party"
      ]
    },
    "service_providing_group_product_application_history_response": {
      "summary": "Service Providing Group Product Application - history",
      "description": "Service Providing Group Product Application - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_id": {
          "description": "Reference to the service providing group.",
          "format": "bigint",
          "type": "integer"
        },
        "procuring_system_operator_id": {
          "description": "Reference to the procuring system operator.",
          "format": "bigint",
          "type": "integer"
        },
        "product_type_ids": {
          "description": "References to the product types.",
          "type": "array",
          "items": {
            "format": "bigint",
            "type": "integer"
          }
        },
        "status": {
          "$ref": "#/$defs/service_providing_group_product_application_status",
          "default": "requested"
        },
        "maximum_active_power_up": {
          "description": "The maximum active power applied for in regulation direction up. Stored in kilowatts.",
          "format": "decimal",
          "type": "number",
          "minimum": 0,
          "maximum": 999999.999,
          "multipleOf": 0.001
        },
        "maximum_active_power_down": {
          "description": "The maximum active power applied for in regulation direction down. Stored in kilowatts.",
          "format": "decimal",
          "type": "number",
          "minimum": 0,
          "maximum": 999999.999,
          "multipleOf": 0.001
        },
        "additional_information": {
          "description": "Free text field for extra information about the application if needed (bidding periods, unavailabilities, etc).",
          "format": "text",
          "type": [
            "string",
            "null"
          ],
          "maxLength": 512
        },
        "prequalified_at": {
          "description": "When the product application was last prequalified.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "verified_at": {
          "description": "When the product application was last verified.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "ramping_capability": {
          "oneOf": [
            {
              "$ref": "#/$defs/service_providing_group_product_application_ramping_capability"
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "ramping_description": {
          "description": "Free text description of ramping details. Only required for product Manual Frequency Restoration (mFRR).",
          "format": "text",
          "type": [
            "string",
            "null"
          ]
        },
        "created_at": {
          "description": "When the application was first created.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "complete_at": {
          "description": "When the application was last marked complete by the procuring system operator.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_application_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_history": {
          "description": "Embedded service_providing_group_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "procuring_system_operator_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "attachment_history": {
          "description": "Embedded service_providing_group_product_application_attachment_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_application_attachment_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "comment_history": {
          "description": "Embedded service_providing_group_product_application_comment_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_application_comment_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_id",
        "procuring_system_operator_id",
        "product_type_ids",
        "status",
        "maximum_active_power_up",
        "maximum_active_power_down",
        "created_at",
        "recorded_at",
        "recorded_by",
        "service_providing_group_product_application_id"
      ]
    },
    "service_providing_group_product_application_ramping_capability": {
      "description": "Whether the service providing group can ramp in accordance with the product requirements during both activation and deactivation.",
      "format": "text",
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "always",
        "partial",
        "never"
      ]
    },
    "service_providing_group_product_application_status": {
      "description": "The status of the application.",
      "format": "text",
      "type": "string",
      "default": "requested",
      "enum": [
        "requested",
        "prequalification",
        "temporary_qualified",
        "prequalified",
        "verified",
        "rejected"
      ]
    },
    "service_providing_group_product_suspension_comment_history_response": {
      "summary": "Service Providing Group Product Suspension Comment - history",
      "description": "Service Providing Group Product Suspension Comment - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_suspension_id": {
          "description": "Reference to the service providing group product suspension.",
          "format": "bigint",
          "type": "integer"
        },
        "created_by": {
          "description": "Reference to the identity that created the comment.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "created_at": {
          "description": "When the comment was added to the SPGPS.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "visibility": {
          "$ref": "#/$defs/service_providing_group_product_suspension_comment_visibility",
          "default": "same_party"
        },
        "content": {
          "description": "Free text content of the comment.",
          "format": "text",
          "type": "string",
          "maxLength": 2048
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_suspension_comment_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "service_providing_group_product_suspension_history": {
          "description": "Embedded service_providing_group_product_suspension_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_suspension_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "service_providing_group_product_suspension_id",
        "created_by",
        "created_at",
        "visibility",
        "content",
        "recorded_at",
        "recorded_by",
        "service_providing_group_product_suspension_comment_id"
      ]
    },
    "service_providing_group_product_suspension_comment_visibility": {
      "description": "The level of visibility of the comment.",
      "format": "text",
      "type": "string",
      "default": "same_party",
      "enum": [
        "same_party",
        "any_involved_party"
      ]
    },
    "service_providing_group_product_suspension_history_response": {
      "summary": "Service Providing Group Product Suspension - history",
      "description": "Service Providing Group Product Suspension - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "procuring_system_operator_id": {
          "description": "Reference to the procuring system operator suspending the service providing group.",
          "format": "bigint",
          "type": "integer"
        },
        "service_providing_group_id": {
          "description": "Reference to the service providing group being suspended.",
          "format": "bigint",
          "type": "integer"
        },
        "product_type_ids": {
          "description": "References to the suspended product types.",
          "type": "array",
          "items": {
            "format": "bigint",
            "type": "integer"
          }
        },
        "reason": {
          "$ref": "#/$defs/service_providing_group_product_suspension_reason"
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "service_providing_group_product_suspension_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "procuring_system_operator_history": {
          "description": "Embedded party_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/party_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "service_providing_group_history": {
          "description": "Embedded service_providing_group_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "comment_history": {
          "description": "Embedded service_providing_group_product_suspension_comment_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/service_providing_group_product_suspension_comment_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "procuring_system_operator_id",
        "service_providing_group_id",
        "product_type_ids",
        "reason",
        "recorded_at",
        "recorded_by",
        "service_providing_group_product_suspension_id"
      ]
    },
    "service_providing_group_product_suspension_reason": {
      "description": "The reason for the suspension.",
      "format": "text",
      "type": "string",
      "enum": [
        "failed_verification",
        "other"
      ]
    },
    "service_providing_group_status": {
      "description": "The status of the group.",
      "format": "text",
      "type": "string",
      "default": "new",
      "enum": [
        "new",
        "active",
        "inactive",
        "terminated"
      ]
    },
    "technical_resource_business_id_type": {
      "description": "The type of business identifier used for the device.",
      "format": "text",
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "serial_number",
        "mac",
        "other"
      ]
    },
    "technical_resource_history_response": {
      "summary": "Technical Resource - history",
      "description": "Technical Resource - history",
      "properties": {
        "id": {
          "description": "Unique surrogate identifier.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "name": {
          "description": "Name of the technical resource. Maximum 128 characters.",
          "format": "text",
          "type": "string"
        },
        "controllable_unit_id": {
          "description": "Reference to the controllable unit that this technical resource belongs to.",
          "format": "bigint",
          "type": "integer"
        },
        "technology": {
          "description": "Technologies of the technical resource. Multiple technologies can be given, e.g. solar and battery for hybrid inverters.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/technology"
          },
          "minItems": 1
        },
        "category": {
          "description": "Categories derived from the technologies of the technical resource. Automatically computed based on the selected technologies.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/category"
          },
          "readOnly": true
        },
        "maximum_active_power": {
          "description": "Rated power in kilowatts. This is the maximum nominal continuous power of the device, typically defined by the manufacturer.",
          "format": "decimal",
          "type": "number",
          "minimum": 0,
          "maximum": 999999.999,
          "nullable": false,
          "multipleOf": 0.001
        },
        "device_type": {
          "description": "The type of device.",
          "allOf": [
            {
              "$ref": "#/$defs/device_type"
            }
          ],
          "nullable": false
        },
        "make": {
          "description": "The manufacturer of the device. Required if model or business id is provided.",
          "format": "text",
          "type": [
            "string",
            "null"
          ],
          "maxLength": 128
        },
        "model": {
          "description": "The model of the device.",
          "format": "text",
          "type": [
            "string",
            "null"
          ],
          "maxLength": 128
        },
        "business_id": {
          "description": "Business identifier of the device, such as a serial number or MAC address.",
          "format": "text",
          "type": [
            "string",
            "null"
          ],
          "maxLength": 256
        },
        "business_id_type": {
          "oneOf": [
            {
              "$ref": "#/$defs/technical_resource_business_id_type"
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        },
        "additional_information": {
          "description": "Free text field for extra information about the technical resource if needed.",
          "format": "text",
          "type": [
            "string",
            "null"
          ]
        },
        "recorded_at": {
          "description": "When the resource was recorded (created or updated) in the system.",
          "format": "date-time",
          "type": "string",
          "readOnly": true
        },
        "recorded_by": {
          "description": "The identity that recorded the resource.",
          "format": "bigint",
          "type": "integer",
          "readOnly": true
        },
        "technical_resource_id": {
          "description": "Reference to the resource that was updated.",
          "format": "bigint",
          "type": "integer"
        },
        "replaced_by": {
          "description": "The identity that updated the resource when it was replaced.",
          "format": "bigint",
          "type": [
            "integer",
            "null"
          ]
        },
        "replaced_at": {
          "description": "When the resource was replaced in the system.",
          "format": "date-time",
          "type": [
            "string",
            "null"
          ]
        },
        "controllable_unit_history": {
          "description": "Embedded controllable_unit_history",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/controllable_unit_history_response"
              }
            },
            {
              "type": "null"
            }
          ],
          "nullable": true
        }
      },
      "required": [
        "id",
        "name",
        "controllable_unit_id",
        "technology",
        "category",
        "maximum_active_power",
        "device_type",
        "recorded_at",
        "recorded_by",
        "technical_resource_id"
      ]
    },
    "technology": {
      "description": "Technology classification using ltree path notation. Technologies are hierarchical (e.g., hydropower.pumped, hvac.heat_pump). Use the most specific technology applicable to the technical resource.",
      "format": "text",
      "type": "string",
      "enum": [
        "hydropower",
        "hydropower.pumped",
        "hydropower.run_of_river",
        "heat_power_plant",
        "heat_power_plant.chp",
        "solar",
        "wind",
        "backup_generator",
        "hvac",
        "hvac.heat",
        "hvac.heat_pump",
        "lighting",
        "water_heater",
        "boiler",
        "ev_charging_device",
        "ev_charging_device.v2g",
        "battery",
        "other.consumption",
        "other.production",
        "other.energy_storage"
      ]
    }
  }
}