"""
Auto-generated Pydantic models from BMRS OpenAPI specification.

This file is automatically generated. Do not edit manually.
"""

from __future__ import annotations  # Enable forward references

from typing import Any, Dict, List, Optional, Union
from datetime import date, datetime
from pydantic import BaseModel, Field, ConfigDict
from elexon_bmrs import enums
from elexon_bmrs import validators
from elexon_bmrs import field_mixins


# Field mixin aliases (provide field definitions + methods)
BmUnitFields = field_mixins.BmUnitFields
BoundaryFields = field_mixins.BoundaryFields
CreatedDateTimeFields = field_mixins.CreatedDateTimeFields
DatasetFields = field_mixins.DatasetFields
DemandFields = field_mixins.DemandFields
DocumentFields = field_mixins.DocumentFields
ForecastDateFields = field_mixins.ForecastDateFields
GenerationFields = field_mixins.GenerationFields
LevelRangeFields = field_mixins.LevelRangeFields
PriceFields = field_mixins.PriceFields
PublishTimeFields = field_mixins.PublishTimeFields
QuantityFields = field_mixins.QuantityFields
SettlementFields = field_mixins.SettlementFields
StartTimeFields = field_mixins.StartTimeFields
TimeRangeFields = field_mixins.TimeRangeFields
VolumeFields = field_mixins.VolumeFields
WeekFields = field_mixins.WeekFields
YearFields = field_mixins.YearFields

# Enum type aliases for convenience
AmendmentflagEnum = enums.AmendmentflagEnum
AssettypeEnum = enums.AssettypeEnum
BmunittypeEnum = enums.BmunittypeEnum
BoundaryEnum = enums.BoundaryEnum
BusinesstypeEnum = enums.BusinesstypeEnum
DatasetEnum = enums.DatasetEnum
DeliverymodeEnum = enums.DeliverymodeEnum
EventstatusEnum = enums.EventstatusEnum
EventtypeEnum = enums.EventtypeEnum
FlowdirectionEnum = enums.FlowdirectionEnum
FueltypeEnum = enums.FueltypeEnum
MarketagreementtypeEnum = enums.MarketagreementtypeEnum
MessagetypeEnum = enums.MessagetypeEnum
PricederivationcodeEnum = enums.PricederivationcodeEnum
ProcesstypeEnum = enums.ProcesstypeEnum
PsrtypeEnum = enums.PsrtypeEnum
RecordtypeEnum = enums.RecordtypeEnum
SettlementruntypeEnum = enums.SettlementruntypeEnum
SystemzoneEnum = enums.SystemzoneEnum
TradedirectionEnum = enums.TradedirectionEnum
UnavailabilitytypeEnum = enums.UnavailabilitytypeEnum
WarningtypeEnum = enums.WarningtypeEnum

# Validator mixin aliases for convenience
SettlementPeriodMixin = validators.SettlementPeriodMixin
SettlementDateMixin = validators.SettlementDateMixin
TimeRangeMixin = validators.TimeRangeMixin
LevelRangeMixin = validators.LevelRangeMixin
PublishTimeMixin = validators.PublishTimeMixin
StartTimeMixin = validators.StartTimeMixin
DocumentMixin = validators.DocumentMixin
DatasetMixin = validators.DatasetMixin
FlowDirectionMixin = validators.FlowDirectionMixin
BmUnitMixin = validators.BmUnitMixin
QuantityMixin = validators.QuantityMixin
PriceMixin = validators.PriceMixin
FuelTypeMixin = validators.FuelTypeMixin
PsrTypeMixin = validators.PsrTypeMixin
BusinessTypeMixin = validators.BusinessTypeMixin
CreatedDateTimeMixin = validators.CreatedDateTimeMixin
RevisionMixin = validators.RevisionMixin
AssetMixin = validators.AssetMixin
MessageMixin = validators.MessageMixin
EventMixin = validators.EventMixin
EventTimeMixin = validators.EventTimeMixin
AffectedUnitMixin = validators.AffectedUnitMixin
ParticipantMixin = validators.ParticipantMixin
AcceptanceMixin = validators.AcceptanceMixin
BidOfferMixin = validators.BidOfferMixin
PairIdMixin = validators.PairIdMixin
FlagsMixin = validators.FlagsMixin
CapacityMixin = validators.CapacityMixin
LeadPartyMixin = validators.LeadPartyMixin
MridMixin = validators.MridMixin
VolumeMixin = validators.VolumeMixin
CostMixin = validators.CostMixin
DemandMixin = validators.DemandMixin
GenerationMixin = validators.GenerationMixin
MarginMixin = validators.MarginMixin
SurplusMixin = validators.SurplusMixin
ImbalanceMixin = validators.ImbalanceMixin
FrequencyMixin = validators.FrequencyMixin
TemperatureMixin = validators.TemperatureMixin
YearMixin = validators.YearMixin
WeekMixin = validators.WeekMixin
MonthMixin = validators.MonthMixin
ForecastDateMixin = validators.ForecastDateMixin
BoundaryMixin = validators.BoundaryMixin
OutputUsableMixin = validators.OutputUsableMixin
BiddingZoneMixin = validators.BiddingZoneMixin
InterconnectorMixin = validators.InterconnectorMixin


class LegacyRemitDetailBody(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data_item: Optional[str] = Field(default=None, alias="dataItem")
    list: Optional[LegacyRemitDetailList] = None


class LegacyRemitDetailItem(AffectedUnitMixin, AssetMixin, CapacityMixin, EventMixin, MessageMixin, BiddingZoneMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    message_id: str = Field(alias="messageId")
    sequence_id: int = Field(alias="sequenceId")
    message_heading: str = Field(alias="messageHeading")
    event_type: EventtypeEnum = Field(alias="eventType")
    publish_date_time_string: Optional[str] = Field(default=None, alias="publishDateTimeString")
    participant_market_participant_id: Optional[str] = Field(default=None, alias="participantMarketParticipantId")
    asset_id: str = Field(alias="assetId")
    asset_eic_code: Optional[str] = Field(default=None, alias="assetEicCode")
    asset_type: AssettypeEnum = Field(alias="assetType")
    affected_unit: str = Field(alias="affectedUnit")
    affected_area: str = Field(alias="affectedArea")
    asset_fuel_type: Optional[str] = Field(default=None, alias="assetFuelType")
    asset_normal_capacity: Optional[float] = Field(default=None, alias="assetNormalCapacity")
    available_capacity: float = Field(alias="availableCapacity")
    unavailable_capacity: float = Field(alias="unavailableCapacity")
    event_start_string: Optional[str] = Field(default=None, alias="eventStartString")
    event_end_string: Optional[str] = Field(default=None, alias="eventEndString")
    cause: str
    event_status: EventstatusEnum = Field(alias="eventStatus")
    related_information: Optional[str] = Field(default=None, alias="relatedInformation")
    active_flag: Optional[str] = Field(default=None, alias="activeFlag")
    message_type: MessagetypeEnum = Field(alias="messageType")
    unavailability_type: UnavailabilitytypeEnum = Field(alias="unavailabilityType")
    acer_code: Optional[str] = Field(default=None, alias="acerCode")
    bidding_zone: str = Field(alias="biddingZone")
    outage_profile: Optional[LegacyRemitOutageProfile] = Field(default=None, alias="outageProfile")
    revision_number: int = Field(alias="revisionNumber")


class LegacyRemitDetailList(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    item: Optional[LegacyRemitDetailItem] = None


class LegacyRemitDetailMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    http_code: Optional[int] = Field(default=None, alias="httpCode")
    error_type: Optional[str] = Field(default=None, alias="errorType")
    description: Optional[str] = None
    query_string: Optional[str] = Field(default=None, alias="queryString")


class LegacyRemitDetailResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    metadata: Optional[LegacyRemitDetailMetadata] = None
    body: Optional[LegacyRemitDetailBody] = None


class LegacyRemitListItem(AffectedUnitMixin, AssetMixin, CapacityMixin, EventMixin, MessageMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    message_id: str = Field(alias="messageId")
    sequence_id: int = Field(alias="sequenceId")
    message_heading: str = Field(alias="messageHeading")
    event_type: EventtypeEnum = Field(alias="eventType")
    publish_date_time_string: Optional[str] = Field(default=None, alias="publishDateTimeString")
    participant_market_participant_id: Optional[str] = Field(default=None, alias="participantMarketParticipantId")
    asset_id: str = Field(alias="assetId")
    asset_eic_code: Optional[str] = Field(default=None, alias="assetEicCode")
    asset_type: AssettypeEnum = Field(alias="assetType")
    affected_unit: str = Field(alias="affectedUnit")
    affected_area: str = Field(alias="affectedArea")
    asset_fuel_type: Optional[str] = Field(default=None, alias="assetFuelType")
    asset_normal_capacity: Optional[float] = Field(default=None, alias="assetNormalCapacity")
    asset_normal_capacity_specified: Optional[bool] = Field(default=None, alias="assetNormalCapacitySpecified")
    available_capacity: float = Field(alias="availableCapacity")
    available_capacity_specified: Optional[bool] = Field(default=None, alias="availableCapacitySpecified")
    event_start_string: Optional[str] = Field(default=None, alias="eventStartString")
    event_end_string: Optional[str] = Field(default=None, alias="eventEndString")
    duration_uncertainty: Optional[str] = Field(default=None, alias="durationUncertainty")
    cause: str
    event_status: EventstatusEnum = Field(alias="eventStatus")
    related_information: Optional[str] = Field(default=None, alias="relatedInformation")
    active_flag: Optional[str] = Field(default=None, alias="activeFlag")
    revision_number: int = Field(alias="revisionNumber")
    message_type: MessagetypeEnum = Field(alias="messageType")
    unavailability_type: UnavailabilitytypeEnum = Field(alias="unavailabilityType")
    unavailable_capacity: float = Field(alias="unavailableCapacity")
    unavailable_capacity_specified: Optional[bool] = Field(default=None, alias="unavailableCapacitySpecified")


class LegacyRemitListMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    http_code: Optional[int] = Field(default=None, alias="httpCode")
    error_type: Optional[str] = Field(default=None, alias="errorType")
    description: Optional[str] = None
    capping_applied: Optional[str] = Field(default=None, alias="cappingApplied")
    capping_limit: Optional[int] = Field(default=None, alias="cappingLimit")
    query_string: Optional[str] = Field(default=None, alias="queryString")


class LegacyRemitListResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    legacy_remit_list_metadata: Optional[LegacyRemitListMetadata] = Field(default=None, alias="legacyRemitListMetadata")
    legacy_remit_list_response_body: Optional[LegacyRemitListResponseBody] = Field(default=None, alias="legacyRemitListResponseBody")


class LegacyRemitListResponseBody(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data_item: Optional[str] = Field(default=None, alias="dataItem")
    legacy_remit_response_list: Optional[LegacyRemitResponseList] = Field(default=None, alias="legacyRemitResponseList")


class LegacyRemitOutageProfile(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    segments: Optional[List[LegacyRemitOutageProfileSegment]] = None


class LegacyRemitOutageProfileSegment(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    segment_start_string: Optional[str] = Field(default=None, alias="segmentStartString")
    segment_end_string: Optional[str] = Field(default=None, alias="segmentEndString")
    segment_capacity: Optional[int] = Field(default=None, alias="segmentCapacity")


class LegacyRemitResponseList(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    item: Optional[List[LegacyRemitListItem]] = None


class ApiResponseSourceMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    datasets: Optional[List[str]] = Field(default=None, examples=[['DATASET']])


class BalancingServicesVolume(SettlementFields, BmUnitFields, BmUnitMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bm_unit_applicable_balancing_services_volume: Optional[float] = Field(default=None, alias="bmUnitApplicableBalancingServicesVolume", examples=[123.45])
    time: Optional[datetime] = Field(default=None, examples=["2022-07-25T09:34:00Z"])


class BidOfferAcceptancesResponse(TimeRangeFields, LevelRangeFields, BmUnitFields, SettlementDateMixin, AcceptanceMixin, BmUnitMixin, FlagsMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_date: date = Field(alias="settlementDate", examples=["2022-06-25"])
    settlement_period_from: int = Field(alias="settlementPeriodFrom", examples=[29])
    settlement_period_to: int = Field(alias="settlementPeriodTo", examples=[32])
    acceptance_number: int = Field(alias="acceptanceNumber", examples=[1234567])
    acceptance_time: datetime = Field(alias="acceptanceTime", examples=["2022-06-25T13:30:00Z"])
    deemed_bo_flag: Optional[bool] = Field(default=None, alias="deemedBoFlag", examples=[True])
    so_flag: Optional[bool] = Field(default=None, alias="soFlag", examples=[False])
    stor_flag: Optional[bool] = Field(default=None, alias="storFlag", examples=[True])
    rr_flag: Optional[bool] = Field(default=None, alias="rrFlag", examples=[False])


class BidOfferResponse(SettlementFields, TimeRangeFields, LevelRangeFields, BmUnitFields, BidOfferMixin, BmUnitMixin, PairIdMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bid: Optional[float] = Field(default=None, examples=[668.67])
    offer: Optional[float] = Field(default=None, examples=[-71.5])
    pair_id: int = Field(alias="pairId", examples=[1])


class CreditDefaultNoticeResponse(ParticipantMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    participant_id: str = Field(alias="participantId", examples=["INVE"])
    participant_name: Optional[str] = Field(default=None, alias="participantName", examples=["AMPowerUK Ltd"])
    credit_default_level: Optional[int] = Field(default=None, alias="creditDefaultLevel", examples=[2])
    entered_default_settlement_date: Optional[date] = Field(default=None, alias="enteredDefaultSettlementDate", examples=["2022-06-25"])
    entered_default_settlement_period: Optional[int] = Field(default=None, alias="enteredDefaultSettlementPeriod", examples=[3])
    cleared_default_settlement_date: Optional[date] = Field(default=None, alias="clearedDefaultSettlementDate", examples=["2022-07-02"])
    cleared_default_settlement_period: Optional[int] = Field(default=None, alias="clearedDefaultSettlementPeriod", examples=[29])
    cleared_default_text: Optional[str] = Field(default=None, alias="clearedDefaultText", examples=["Credit Cover Percentage greater than or equal to 90% of Credit Limit (Level 2 Default)"])


class BalancingServicesVolumeData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bm_unit_applicable_balancing_services_volume: Optional[float] = Field(default=None, alias="bmUnitApplicableBalancingServicesVolume", examples=[123.45])


class BidOfferAcceptanceLevelDatasetResponse(TimeRangeFields, LevelRangeFields, BmUnitFields, DatasetFields, SettlementDateMixin, AcceptanceMixin, BmUnitMixin, DatasetMixin, FlagsMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_date: date = Field(alias="settlementDate", examples=["2022-07-25"])
    settlement_period_from: int = Field(alias="settlementPeriodFrom", examples=[29])
    settlement_period_to: int = Field(alias="settlementPeriodTo", examples=[32])
    acceptance_number: int = Field(alias="acceptanceNumber", examples=[1234567])
    acceptance_time: datetime = Field(alias="acceptanceTime", examples=["2022-06-25T13:37:00Z"])
    deemed_bo_flag: Optional[bool] = Field(default=None, alias="deemedBoFlag")
    so_flag: Optional[bool] = Field(default=None, alias="soFlag")
    amendment_flag: AmendmentflagEnum = Field(alias="amendmentFlag", examples=["ORI"])
    stor_flag: Optional[bool] = Field(default=None, alias="storFlag")
    rr_flag: Optional[bool] = Field(default=None, alias="rrFlag")


class BidOfferDatasetResponse(SettlementFields, TimeRangeFields, LevelRangeFields, BmUnitFields, DatasetFields, BidOfferMixin, BmUnitMixin, DatasetMixin, PairIdMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    pair_id: int = Field(alias="pairId", examples=[1])
    offer: Optional[float] = Field(default=None, examples=[-71.5])
    bid: Optional[float] = Field(default=None, examples=[668.67])


class CreditDefaultNoticeDatasetResponse(PublishTimeFields, DatasetFields, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bsc_party_id: Optional[str] = Field(default=None, alias="bscPartyId", examples=["INVE"])
    credit_default_level: Optional[int] = Field(default=None, alias="creditDefaultLevel", examples=[1])
    entered_default_settlement_date: Optional[date] = Field(default=None, alias="enteredDefaultSettlementDate", examples=["2022-06-25"])
    entered_default_settlement_period: Optional[int] = Field(default=None, alias="enteredDefaultSettlementPeriod", examples=[3])
    cleared_default_settlement_date: Optional[date] = Field(default=None, alias="clearedDefaultSettlementDate", examples=["2022-07-02"])
    cleared_default_settlement_period: Optional[int] = Field(default=None, alias="clearedDefaultSettlementPeriod", examples=[29])
    cleared_default_text: Optional[str] = Field(default=None, alias="clearedDefaultText", examples=["Credit Cover Percentage greater than or equal to 90% of Credit Limit (Level 2 Default)"])


class DisaggregatedBalancingServicesAdjustmentData(SettlementFields, DatasetFields, VolumeFields, AssetMixin, DatasetMixin, FlagsMixin, VolumeMixin, CostMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    id: int = Field(examples=[1])
    cost: float = Field(examples=[1850.9])
    so_flag: Optional[bool] = Field(default=None, alias="soFlag")
    stor_flag: Optional[bool] = Field(default=None, alias="storFlag")
    party_id: Optional[str] = Field(default=None, alias="partyId", examples=["ElectroRoute Energy Trading Limited"])
    asset_id: str = Field(alias="assetId", examples=["ING-ELTR1"])
    is_tendered: Optional[bool] = Field(default=None, alias="isTendered")
    service: Optional[str] = Field(default=None, examples=["Energy"])


class MarketIndexDatasetResponse(SettlementFields, StartTimeFields, DatasetFields, PriceFields, VolumeFields, DatasetMixin, VolumeMixin, PriceMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data_provider: Optional[str] = Field(default=None, alias="dataProvider", examples=["N2EXMIDP"])


class NetBalancingServicesAdjustmentData(SettlementFields, DatasetFields, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    net_buy_price_cost_adjustment_energy: Optional[float] = Field(default=None, alias="netBuyPriceCostAdjustmentEnergy", examples=[0])
    net_buy_price_volume_adjustment_energy: Optional[float] = Field(default=None, alias="netBuyPriceVolumeAdjustmentEnergy", examples=[0])
    net_buy_price_volume_adjustment_system: Optional[float] = Field(default=None, alias="netBuyPriceVolumeAdjustmentSystem", examples=[0])
    buy_price_price_adjustment: Optional[float] = Field(default=None, alias="buyPricePriceAdjustment", examples=[0])
    net_sell_price_cost_adjustment_energy: Optional[float] = Field(default=None, alias="netSellPriceCostAdjustmentEnergy", examples=[0])
    net_sell_price_volume_adjustment_energy: Optional[float] = Field(default=None, alias="netSellPriceVolumeAdjustmentEnergy", examples=[0])
    net_sell_price_volume_adjustment_system: Optional[float] = Field(default=None, alias="netSellPriceVolumeAdjustmentSystem", examples=[0])
    sell_price_price_adjustment: Optional[float] = Field(default=None, alias="sellPricePriceAdjustment", examples=[0])


class DisaggregatedBalancingServicesAdjustmentDetailsResponse(SettlementFields, StartTimeFields, PriceFields, VolumeFields, AssetMixin, FlagsMixin, VolumeMixin, CostMixin, PriceMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    id: int = Field(examples=[1])
    cost: float = Field(examples=[1850.9])
    so_flag: Optional[bool] = Field(default=None, alias="soFlag")
    stor_flag: Optional[bool] = Field(default=None, alias="storFlag")
    party_id: Optional[str] = Field(default=None, alias="partyId", examples=["ElectroRoute Energy Trading Limited"])
    asset_id: str = Field(alias="assetId", examples=["ING-ELTR1"])
    is_tendered: Optional[bool] = Field(default=None, alias="isTendered")
    service: Optional[str] = Field(default=None, examples=["Energy"])


class DisaggregatedBalancingServicesAdjustmentSummaryResponse(SettlementFields, StartTimeFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    buy_action_count: Optional[int] = Field(default=None, alias="buyActionCount", examples=[2])
    sell_action_count: Optional[int] = Field(default=None, alias="sellActionCount", examples=[2])
    buy_price_minimum: Optional[float] = Field(default=None, alias="buyPriceMinimum", examples=[10.23])
    buy_price_maximum: Optional[float] = Field(default=None, alias="buyPriceMaximum", examples=[30.45])
    buy_price_average: Optional[float] = Field(default=None, alias="buyPriceAverage", examples=[20.34])
    sell_price_minimum: Optional[float] = Field(default=None, alias="sellPriceMinimum", examples=[1.23])
    sell_price_maximum: Optional[float] = Field(default=None, alias="sellPriceMaximum", examples=[3.45])
    sell_price_average: Optional[float] = Field(default=None, alias="sellPriceAverage", examples=[2.34])
    buy_volume_total: Optional[float] = Field(default=None, alias="buyVolumeTotal", examples=[40.68])
    sell_volume_total: Optional[float] = Field(default=None, alias="sellVolumeTotal", examples=[4.68])
    net_volume: Optional[float] = Field(default=None, alias="netVolume", examples=[36])


class DeliveryPeriodMaxData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-25T09:34:00Z"])
    period_max: Optional[int] = Field(default=None, alias="periodMax", examples=[360])


class DeliveryPeriodMinData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-25T09:34:00Z"])
    period_min: Optional[int] = Field(default=None, alias="periodMin", examples=[360])


class DeliveryVolumeMaxData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-01T13:34:00Z"])
    volume_max: Optional[int] = Field(default=None, alias="volumeMax", examples=[31])


class NoticeData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-01T13:34:00Z"])
    notice: Optional[int] = Field(default=None, examples=[13])


class StablePortageLimitData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-01T13:34:00Z"])
    level: Optional[int] = Field(default=None, examples=[5])


class DynamicData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-01T13:34:00Z"])
    value: Optional[int] = Field(default=None, examples=[5])


class RateData(SettlementFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time: Optional[datetime] = Field(default=None, examples=["2022-07-01T13:34:00Z"])
    rate1: Optional[float] = Field(default=None, examples=[0.4])
    elbow2: Optional[float] = Field(default=None, examples=[5])
    rate2: Optional[float] = Field(default=None, examples=[300.2])
    elbow3: Optional[float] = None
    rate3: Optional[float] = None


class MarketIndexResponse(SettlementFields, StartTimeFields, PriceFields, VolumeFields, VolumeMixin, PriceMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data_provider: Optional[str] = Field(default=None, alias="dataProvider", examples=["N2EXMIDP"])


class NetBalancingServicesAdjustmentResponse(SettlementFields, StartTimeFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    net_buy_price_cost_adjustment_energy: Optional[float] = Field(default=None, alias="netBuyPriceCostAdjustmentEnergy", examples=[0])
    net_buy_price_volume_adjustment_energy: Optional[float] = Field(default=None, alias="netBuyPriceVolumeAdjustmentEnergy", examples=[0])
    net_buy_price_volume_adjustment_system: Optional[float] = Field(default=None, alias="netBuyPriceVolumeAdjustmentSystem", examples=[0])
    buy_price_price_adjustment: Optional[float] = Field(default=None, alias="buyPricePriceAdjustment", examples=[0])
    net_sell_price_cost_adjustment_energy: Optional[float] = Field(default=None, alias="netSellPriceCostAdjustmentEnergy", examples=[0])
    net_sell_price_volume_adjustment_energy: Optional[float] = Field(default=None, alias="netSellPriceVolumeAdjustmentEnergy", examples=[0])
    net_sell_price_volume_adjustment_system: Optional[float] = Field(default=None, alias="netSellPriceVolumeAdjustmentSystem", examples=[0])
    sell_price_price_adjustment: Optional[float] = Field(default=None, alias="sellPricePriceAdjustment", examples=[0])


class NonBmStorResponse(SettlementFields, PublishTimeFields, StartTimeFields, GenerationFields, GenerationMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DeliveryLimitMaxData(SettlementFields, TimeRangeFields, LevelRangeFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    notification_time: Optional[datetime] = Field(default=None, alias="notificationTime", examples=["2022-07-01T13:34:00Z"])
    notification_sequence: Optional[int] = Field(default=None, alias="notificationSequence", examples=[93210322])


class PhysicalNotificationData(SettlementFields, TimeRangeFields, LevelRangeFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class PhysicalData(SettlementFields, TimeRangeFields, LevelRangeFields, BmUnitFields, DatasetFields, BmUnitMixin, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class AcceptanceVolumeResponse(SettlementFields, BmUnitFields, StartTimeFields, CreatedDateTimeFields, BmUnitMixin, CreatedDateTimeMixin, LeadPartyMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bm_unit_type: BmunittypeEnum = Field(alias="bmUnitType", examples=["T"])
    lead_party_name: str = Field(alias="leadPartyName", examples=["Aberdeen Offshore Wind Farm"])
    acceptance_id: int = Field(alias="acceptanceId", examples=[76110])
    acceptance_duration: Optional[str] = Field(default=None, alias="acceptanceDuration", examples=["L"])
    total_volume_accepted: Optional[float] = Field(default=None, alias="totalVolumeAccepted", examples=[-75.725])
    pair_volumes: Optional[DerivedDataBidOfferPairs] = Field(default=None, alias="pairVolumes")


class DerivedDataBidOfferPairs(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    negative1: Optional[float] = None
    positive1: Optional[float] = Field(default=None, examples=[23062.377])
    negative2: Optional[float] = None
    positive2: Optional[float] = Field(default=None, examples=[5017.6255])
    negative3: Optional[float] = None
    positive3: Optional[float] = None
    negative4: Optional[float] = None
    positive4: Optional[float] = None
    negative5: Optional[float] = None
    positive5: Optional[float] = None
    negative6: Optional[float] = None
    positive6: Optional[float] = None


class HistoricAcceptanceResponse(SettlementFields, BmUnitFields, AcceptanceMixin, BmUnitMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    acceptance_number: int = Field(alias="acceptanceNumber", examples=[22])
    acceptance_time: datetime = Field(alias="acceptanceTime", examples=["2023-11-15T00:00:00Z"])
    bid_price: Optional[float] = Field(default=None, alias="bidPrice", examples=[-44.95])
    offer_price: Optional[float] = Field(default=None, alias="offerPrice", examples=[449.95])
    bid_offer_pair_id: Optional[int] = Field(default=None, alias="bidOfferPairId", examples=[1])


class IndicativeCashflowResponse(SettlementFields, BmUnitFields, StartTimeFields, CreatedDateTimeFields, BmUnitMixin, CreatedDateTimeMixin, LeadPartyMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bm_unit_type: BmunittypeEnum = Field(alias="bmUnitType", examples=["S"])
    lead_party_name: str = Field(alias="leadPartyName", examples=["Flexitricity Limited"])
    bid_offer_pair_cashflows: Optional[DerivedDataBidOfferPairs] = Field(default=None, alias="bidOfferPairCashflows")
    total_cashflow: Optional[float] = Field(default=None, alias="totalCashflow", examples=[28080.002])


class IndicativeVolumeResponse(SettlementFields, BmUnitFields, StartTimeFields, CreatedDateTimeFields, BmUnitMixin, CreatedDateTimeMixin, LeadPartyMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bm_unit_type: BmunittypeEnum = Field(alias="bmUnitType", examples=["T"])
    lead_party_name: str = Field(alias="leadPartyName", examples=["Aberdeen Offshore Wind Farm"])
    data_type: Optional[str] = Field(default=None, alias="dataType", examples=["Original"])
    total_volume_accepted: Optional[float] = Field(default=None, alias="totalVolumeAccepted", examples=[-75.725])
    pair_volumes: Optional[DerivedDataBidOfferPairs] = Field(default=None, alias="pairVolumes")


class MarketDepthResponse(SettlementFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    indicated_imbalance: Optional[int] = Field(default=None, alias="indicatedImbalance", examples=[419])
    offer_volume: Optional[float] = Field(default=None, alias="offerVolume", examples=[51708.5])
    bid_volume: Optional[float] = Field(default=None, alias="bidVolume", examples=[-60941.5])
    total_accepted_offer_volume: Optional[float] = Field(default=None, alias="totalAcceptedOfferVolume", examples=[376.35834])
    total_accepted_bid_volume: Optional[float] = Field(default=None, alias="totalAcceptedBidVolume", examples=[-164.875])
    priced_accepted_offers_volume: Optional[float] = Field(default=None, alias="pricedAcceptedOffersVolume", examples=[573.8417])
    priced_accepted_bids_volume: Optional[float] = Field(default=None, alias="pricedAcceptedBidsVolume", examples=[-42.375])


class SettlementMessageResponse(SettlementFields, StartTimeFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    message_received_date_time: datetime = Field(alias="messageReceivedDateTime", examples=["2023-09-17T15:31:12Z"])
    message_severity: Optional[str] = Field(default=None, alias="messageSeverity", examples=["Error"])
    message_type_code: Optional[str] = Field(default=None, alias="messageTypeCode", examples=["ERR-BM-001"])
    message_type: MessagetypeEnum = Field(alias="messageType", examples=["FPN"])
    message_text: Optional[str] = Field(default=None, alias="messageText", examples=["No FPN files have been received."])


class SettlementStackResponse(SettlementFields, StartTimeFields, VolumeFields, CreatedDateTimeFields, CreatedDateTimeMixin, FlagsMixin, VolumeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    sequence_number: Optional[int] = Field(default=None, alias="sequenceNumber", examples=[1])
    id: str = Field(examples=["T_STAY-2"])
    acceptance_id: int = Field(alias="acceptanceId", examples=[102999])
    bid_offer_pair_id: Optional[int] = Field(default=None, alias="bidOfferPairId", examples=[1])
    cadl_flag: Optional[bool] = Field(default=None, alias="cadlFlag", examples=[False])
    so_flag: Optional[bool] = Field(default=None, alias="soFlag", examples=[False])
    stor_provider_flag: Optional[bool] = Field(default=None, alias="storProviderFlag", examples=[False])
    repriced_indicator: Optional[bool] = Field(default=None, alias="repricedIndicator", examples=[False])
    reserve_scarcity_price: Optional[float] = Field(default=None, alias="reserveScarcityPrice", examples=[0])
    original_price: Optional[float] = Field(default=None, alias="originalPrice", examples=[202])
    dmat_adjusted_volume: Optional[float] = Field(default=None, alias="dmatAdjustedVolume", examples=[52.5])
    arbitrage_adjusted_volume: Optional[float] = Field(default=None, alias="arbitrageAdjustedVolume", examples=[52.5])
    niv_adjusted_volume: Optional[float] = Field(default=None, alias="nivAdjustedVolume", examples=[52.5])
    par_adjusted_volume: Optional[float] = Field(default=None, alias="parAdjustedVolume", examples=[0])
    final_price: Optional[float] = Field(default=None, alias="finalPrice")
    transmission_loss_multiplier: Optional[float] = Field(default=None, alias="transmissionLossMultiplier", examples=[0.9933898])
    tlm_adjusted_volume: Optional[float] = Field(default=None, alias="tlmAdjustedVolume", examples=[0])
    tlm_adjusted_cost: Optional[float] = Field(default=None, alias="tlmAdjustedCost", examples=[0])


class SettlementSummaryPrice(VolumeFields, VolumeMixin, CostMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    cost: float = Field(examples=[-53.66])
    value: Optional[float] = Field(default=None, examples=[54])


class SettlementSummaryResponse(SettlementFields, StartTimeFields, CreatedDateTimeFields, CreatedDateTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    adjuster: Optional[float] = Field(default=None, examples=[0])
    price_derivation_code: Optional[PricederivationcodeEnum] = Field(default=None, alias="priceDerivationCode", examples=["N"])
    system_sell_price: Optional[float] = Field(default=None, alias="systemSellPrice", examples=[54])
    system_buy_price: Optional[float] = Field(default=None, alias="systemBuyPrice", examples=[54])
    main_price: Optional[SettlementSummaryPrice] = Field(default=None, alias="mainPrice")
    market_price: Optional[SettlementSummaryPrice] = Field(default=None, alias="marketPrice")


class SystemPriceResponse(SettlementFields, StartTimeFields, CreatedDateTimeFields, CreatedDateTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    system_sell_price: Optional[float] = Field(default=None, alias="systemSellPrice", examples=[215])
    system_buy_price: Optional[float] = Field(default=None, alias="systemBuyPrice", examples=[215])
    bsad_defaulted: Optional[bool] = Field(default=None, alias="bsadDefaulted", examples=[False])
    price_derivation_code: Optional[PricederivationcodeEnum] = Field(default=None, alias="priceDerivationCode", examples=["P"])
    reserve_scarcity_price: Optional[float] = Field(default=None, alias="reserveScarcityPrice", examples=[0])
    net_imbalance_volume: Optional[float] = Field(default=None, alias="netImbalanceVolume", examples=[291.9136])
    sell_price_adjustment: Optional[float] = Field(default=None, alias="sellPriceAdjustment", examples=[0])
    buy_price_adjustment: Optional[float] = Field(default=None, alias="buyPriceAdjustment", examples=[0])
    replacement_price: Optional[float] = Field(default=None, alias="replacementPrice")
    replacement_price_reference_volume: Optional[float] = Field(default=None, alias="replacementPriceReferenceVolume")
    total_accepted_offer_volume: Optional[float] = Field(default=None, alias="totalAcceptedOfferVolume", examples=[790.6547])
    total_accepted_bid_volume: Optional[float] = Field(default=None, alias="totalAcceptedBidVolume", examples=[-738.74115])
    total_adjustment_sell_volume: Optional[float] = Field(default=None, alias="totalAdjustmentSellVolume", examples=[0])
    total_adjustment_buy_volume: Optional[float] = Field(default=None, alias="totalAdjustmentBuyVolume", examples=[240])
    total_system_tagged_accepted_offer_volume: Optional[float] = Field(default=None, alias="totalSystemTaggedAcceptedOfferVolume", examples=[789.6547])
    total_system_tagged_accepted_bid_volume: Optional[float] = Field(default=None, alias="totalSystemTaggedAcceptedBidVolume", examples=[-738.74115])
    total_system_tagged_adjustment_sell_volume: Optional[float] = Field(default=None, alias="totalSystemTaggedAdjustmentSellVolume")
    total_system_tagged_adjustment_buy_volume: Optional[float] = Field(default=None, alias="totalSystemTaggedAdjustmentBuyVolume", examples=[240])


class CreditDefaultNoticeResponse_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[CreditDefaultNoticeResponse]] = None


class BalancingServicesVolumeData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BalancingServicesVolumeData]] = None


class BidOfferAcceptanceLevelDatasetResponse_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BidOfferAcceptanceLevelDatasetResponse]] = None


class BidOfferDatasetResponse_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BidOfferDatasetResponse]] = None


class CreditDefaultNoticeDatasetResponse_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[CreditDefaultNoticeDatasetResponse]] = None


class DisaggregatedBalancingServicesAdjustmentData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DisaggregatedBalancingServicesAdjustmentData]] = None


class MarketIndexDatasetResponse_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[MarketIndexDatasetResponse]] = None


class NetBalancingServicesAdjustmentData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[NetBalancingServicesAdjustmentData]] = None


class DeliveryPeriodMaxData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DeliveryPeriodMaxData]] = None


class DeliveryPeriodMinData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DeliveryPeriodMinData]] = None


class DeliveryVolumeMaxData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DeliveryVolumeMaxData]] = None


class NoticeData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[NoticeData]] = None


class StablePortageLimitData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[StablePortageLimitData]] = None


class RateData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RateData]] = None


class DeliveryLimitMaxData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DeliveryLimitMaxData]] = None


class PhysicalNotificationData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[PhysicalNotificationData]] = None


class DemandForecastNationalDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastNationalDaily]] = None


class DemandForecastNationalDayAhead_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastNationalDayAhead]] = None


class DemandForecastNationalWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastNationalWeekly]] = None


class DemandForecastTransmissionDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastTransmissionDaily]] = None


class DemandForecastTransmissionDayAhead_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastTransmissionDayAhead]] = None


class DemandForecastTransmissionWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastTransmissionWeekly]] = None


class DemandOutturnNational_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandOutturnNational]] = None


class DemandOutturnTransmission_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandOutturnTransmission]] = None


class IndodDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndodDatasetRow]] = None


class ForecastMarginDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastMarginDaily]] = None


class ForecastMarginWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastMarginWeekly]] = None


class ForecastSurplusDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastSurplusDaily]] = None


class ForecastSurplusWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastSurplusWeekly]] = None


class AugmentedOutturnData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AugmentedOutturnData]] = None


class AvailabilityByBmUnitDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityByBmUnitDaily]] = None


class AvailabilityByBmUnitWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityByBmUnitWeekly]] = None


class AvailabilityByFuelTypeDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityByFuelTypeDaily]] = None


class AvailabilityByFuelTypeWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityByFuelTypeWeekly]] = None


class AvailabilityDaily_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityDaily]] = None


class AvailabilityWeekly_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityWeekly]] = None


class NonBmStorData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[NonBmStorData]] = None


class WindGenerationForecast_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[WindGenerationForecast]] = None


class IndicatedDemand_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicatedDemand]] = None


class IndicatedGeneration_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicatedGeneration]] = None


class IndicatedImbalance_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicatedImbalance]] = None


class IndicatedMargin_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicatedMargin]] = None


class DemandControlInstructionDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandControlInstructionDatasetRow]] = None


class LossOfLoadProbabilityDeratedMarginData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[LossOfLoadProbabilityDeratedMarginData]] = None


class SoSoPricesDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SoSoPricesDatasetRow]] = None


class SystemFrequency_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SystemFrequency]] = None


class SystemWarningsData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SystemWarningsData]] = None


class TemperatureData_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[TemperatureData]] = None


class TudmDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[TudmDatasetRow]] = None


class DatasetMetadataLatestRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DatasetMetadataLatestRow]] = None


class RestorationZoneDemandForecastDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RestorationZoneDemandForecastDatasetRow]] = None


class RestorationZoneDemandRestoredDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RestorationZoneDemandRestoredDatasetRow]] = None


class AbucDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AbucDatasetRow]] = None


class ActualAggregatedGenerationPerTypeDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualAggregatedGenerationPerTypeDatasetRow]] = None


class ActualGenerationOutputPerGenerationUnitDatasetResponse_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualGenerationOutputPerGenerationUnitDatasetResponse]] = None


class ActualGenerationWindSolarDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualGenerationWindSolarDatasetRow]] = None


class ActualTotalLoadPerBiddingZoneDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualTotalLoadPerBiddingZoneDatasetRow]] = None


class AobeDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AobeDatasetRow]] = None


class BebDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BebDatasetRow]] = None


class CbsDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[CbsDatasetRow]] = None


class CostsOfCongestionManagementDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[CostsOfCongestionManagementDatasetRow]] = None


class DayAheadAggregatedGenerationDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DayAheadAggregatedGenerationDatasetRow]] = None


class DayAheadGenerationForWindAndSolarDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DayAheadGenerationForWindAndSolarDatasetRow]] = None


class DayAheadTotalLoadPerBiddingZoneDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DayAheadTotalLoadPerBiddingZoneDatasetRow]] = None


class FeibDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[FeibDatasetRow]] = None


class IgcaDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IgcaDatasetRow]] = None


class IgcpuDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IgcpuDatasetRow]] = None


class MonthAheadTotalLoadPerBiddingZoneDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[MonthAheadTotalLoadPerBiddingZoneDatasetRow]] = None


class PbcDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[PbcDatasetRow]] = None


class PpbrDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[PpbrDatasetRow]] = None


class WeekAheadTotalLoadPerBiddingZoneDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[WeekAheadTotalLoadPerBiddingZoneDatasetRow]] = None


class YearAheadForecastMarginDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[YearAheadForecastMarginDatasetRow]] = None


class YearAheadTotalLoadPerBiddingZoneDatasetRow_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[YearAheadTotalLoadPerBiddingZoneDatasetRow]] = None


class RemitMessage_DatasetResponse(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RemitMessage]] = None


class DemandForecastNationalDaily(PublishTimeFields, DatasetFields, DemandFields, ForecastDateFields, DatasetMixin, DemandMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandForecastNationalDayAhead(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, DemandFields, BoundaryFields, DatasetMixin, DemandMixin, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandForecastNationalWeekly(PublishTimeFields, DatasetFields, DemandFields, YearFields, WeekFields, DatasetMixin, DemandMixin, YearMixin, WeekMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandForecastTransmissionDaily(PublishTimeFields, DatasetFields, DemandFields, ForecastDateFields, DatasetMixin, DemandMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandForecastTransmissionDayAhead(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, DemandFields, BoundaryFields, DatasetMixin, DemandMixin, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandForecastTransmissionWeekly(PublishTimeFields, DatasetFields, DemandFields, YearFields, WeekFields, DatasetMixin, DemandMixin, YearMixin, WeekMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandForecastDaily(PublishTimeFields, ForecastDateFields, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    transmission_system_demand: int = Field(alias="transmissionSystemDemand")
    national_demand: int = Field(alias="nationalDemand")


class DemandForecastDayAhead(SettlementFields, PublishTimeFields, StartTimeFields, BoundaryFields, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    transmission_system_demand: int = Field(alias="transmissionSystemDemand")
    national_demand: int = Field(alias="nationalDemand")


class DemandForecastPeak(SettlementFields, PublishTimeFields, StartTimeFields, BoundaryFields, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    transmission_system_demand: int = Field(alias="transmissionSystemDemand")


class DemandForecastWeekly(PublishTimeFields, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    transmission_system_demand: int = Field(alias="transmissionSystemDemand")
    national_demand: int = Field(alias="nationalDemand")
    forecast_week: int = Field(alias="forecastWeek")
    forecast_year: int = Field(alias="forecastYear")
    week_start_date: date = Field(alias="weekStartDate")


class DemandOutturnNational(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, DemandFields, DatasetMixin, DemandMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DemandOutturnTransmission(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, DemandFields, DatasetMixin, DemandMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class IndodDatasetRow(PublishTimeFields, DatasetFields, DemandFields, SettlementDateMixin, DatasetMixin, DemandMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_date: date = Field(alias="settlementDate", examples=["2023-08-26"])


class DemandOutturn(SettlementFields, PublishTimeFields, StartTimeFields, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    initial_demand_outturn: Optional[int] = Field(default=None, alias="initialDemandOutturn")
    initial_transmission_system_demand_outturn: Optional[int] = Field(default=None, alias="initialTransmissionSystemDemandOutturn")


class DemandOutturnPeak(SettlementFields, PublishTimeFields, StartTimeFields, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    initial_transmission_system_demand_outturn: Optional[int] = Field(default=None, alias="initialTransmissionSystemDemandOutturn")


class IndicativeDemandPeak(SettlementFields, DemandFields, DemandMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    half_hour_end_time: datetime = Field(alias="halfHourEndTime", examples=["2021-10-01T01:00:00Z"])
    settlement_run_type: Optional[SettlementruntypeEnum] = Field(default=None, alias="settlementRunType", examples=["II"])


class IndodRow(PublishTimeFields, DemandFields, SettlementDateMixin, DemandMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_date: date = Field(alias="settlementDate", examples=["2023-08-26"])


class RollingSystemDemand(StartTimeFields, DemandFields, DemandMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    record_type: Optional[RecordtypeEnum] = Field(default=None, alias="recordType")


class ForecastMarginDaily(PublishTimeFields, DatasetFields, ForecastDateFields, DatasetMixin, MarginMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    margin: int


class ForecastMarginWeekly(PublishTimeFields, DatasetFields, YearFields, WeekFields, DatasetMixin, MarginMixin, YearMixin, WeekMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    margin: int


class ForecastMarginDaily_1(PublishTimeFields, ForecastDateFields, MarginMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    margin: int


class ForecastMarginWeekly_1(PublishTimeFields, YearFields, WeekFields, MarginMixin, YearMixin, WeekMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    margin: int
    week_start_date: date = Field(alias="weekStartDate")


class ForecastSurplusDaily(PublishTimeFields, DatasetFields, ForecastDateFields, DatasetMixin, SurplusMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    surplus: int


class ForecastSurplusWeekly(PublishTimeFields, DatasetFields, YearFields, WeekFields, DatasetMixin, SurplusMixin, YearMixin, WeekMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    surplus: int


class ForecastSurplusDaily_1(PublishTimeFields, ForecastDateFields, SurplusMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    surplus: int


class ForecastSurplusWeekly_1(PublishTimeFields, YearFields, WeekFields, SurplusMixin, YearMixin, WeekMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    surplus: int
    week_start_date: date = Field(alias="weekStartDate")


class AvailabilityDaily(PublishTimeFields, DatasetFields, ForecastDateFields, BmUnitMixin, DatasetMixin, FuelTypeMixin, ForecastDateMixin, OutputUsableMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["CCGT"])
    ngc_bm_unit: Optional[str] = Field(default=None, alias="ngcBmUnit", examples=["CARR-1"])
    bm_unit: str = Field(alias="bmUnit", examples=["T_CARR-1"])
    output_usable: int = Field(alias="outputUsable", examples=[418])


class AvailabilityWeekly(PublishTimeFields, DatasetFields, YearFields, BmUnitMixin, DatasetMixin, FuelTypeMixin, YearMixin, OutputUsableMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["CCGT"])
    ngc_bm_unit: Optional[str] = Field(default=None, alias="ngcBmUnit", examples=["CARR-1"])
    bm_unit: str = Field(alias="bmUnit", examples=["T_CARR-1"])
    output_usable: int = Field(alias="outputUsable", examples=[418])
    calendar_week_number: int = Field(alias="calendarWeekNumber", examples=[23])


class AugmentedOutturnData(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, GenerationFields, DatasetMixin, FuelTypeMixin, GenerationMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["BIOMASS"])


class AvailabilityByBmUnitDaily(BmUnitFields, PublishTimeFields, DatasetFields, ForecastDateFields, BmUnitMixin, DatasetMixin, FuelTypeMixin, ForecastDateMixin, OutputUsableMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["WIND"])
    output_usable: int = Field(alias="outputUsable", examples=[84])


class AvailabilityByBmUnitWeekly(BmUnitFields, PublishTimeFields, DatasetFields, YearFields, WeekFields, BmUnitMixin, DatasetMixin, FuelTypeMixin, YearMixin, WeekMixin, OutputUsableMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["CCGT"])
    output_usable: int = Field(alias="outputUsable", examples=[442])


class AvailabilityByFuelTypeDaily(PublishTimeFields, DatasetFields, ForecastDateFields, DatasetMixin, FuelTypeMixin, ForecastDateMixin, OutputUsableMixin, BiddingZoneMixin, InterconnectorMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType")
    system_zone: SystemzoneEnum = Field(alias="systemZone")
    forecast_date_timezone: Optional[str] = Field(default=None, alias="forecastDateTimezone")
    output_usable: int = Field(alias="outputUsable")
    bidding_zone: str = Field(alias="biddingZone")
    interconnector_name: str = Field(alias="interconnectorName")
    interconnector: Optional[bool] = None


class AvailabilityByFuelTypeWeekly(PublishTimeFields, DatasetFields, YearFields, DatasetMixin, FuelTypeMixin, YearMixin, OutputUsableMixin, BiddingZoneMixin, InterconnectorMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType")
    system_zone: SystemzoneEnum = Field(alias="systemZone")
    calendar_week_number: int = Field(alias="calendarWeekNumber")
    output_usable: int = Field(alias="outputUsable")
    bidding_zone: str = Field(alias="biddingZone")
    interconnector_name: str = Field(alias="interconnectorName")
    interconnector: Optional[bool] = None


class AvailabilityDaily_1(PublishTimeFields, DatasetFields, ForecastDateFields, DatasetMixin, ForecastDateMixin, OutputUsableMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    system_zone: SystemzoneEnum = Field(alias="systemZone")
    forecast_date_timezone: Optional[str] = Field(default=None, alias="forecastDateTimezone")
    output_usable: int = Field(alias="outputUsable")


class AvailabilityWeekly_1(PublishTimeFields, DatasetFields, YearFields, DatasetMixin, YearMixin, OutputUsableMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    system_zone: SystemzoneEnum = Field(alias="systemZone")
    calendar_week_number: int = Field(alias="calendarWeekNumber")
    output_usable: int = Field(alias="outputUsable")


class NonBmStorData(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, GenerationFields, DatasetMixin, GenerationMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class WindGenerationForecast(PublishTimeFields, StartTimeFields, DatasetFields, GenerationFields, DatasetMixin, GenerationMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class GenerationByFuelType(DatasetFields, DatasetMixin, FuelTypeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType")
    current_usage: Optional[int] = Field(default=None, alias="currentUsage")
    current_percentage: Optional[float] = Field(default=None, alias="currentPercentage")
    half_hour_usage: Optional[int] = Field(default=None, alias="halfHourUsage")
    half_hour_percentage: Optional[float] = Field(default=None, alias="halfHourPercentage")
    twenty_four_hour_usage: Optional[int] = Field(default=None, alias="twentyFourHourUsage")
    twenty_four_hour_percentage: Optional[float] = Field(default=None, alias="twentyFourHourPercentage")


class HalfHourlyInterconnectorOutturn(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, GenerationFields, DatasetMixin, GenerationMixin, InterconnectorMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_date_timezone: Optional[str] = Field(default=None, alias="settlementDateTimezone")
    interconnector_name: str = Field(alias="interconnectorName")


class OutturnGenerationBySettlementPeriod(StartTimeFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_period: int = Field(alias="settlementPeriod")
    data: Optional[List[OutturnGenerationValue]] = None


class OutturnGenerationValue(GenerationFields, FuelTypeMixin, GenerationMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    fuel_type: FueltypeEnum = Field(alias="fuelType")


class WindGenerationForecast_1(SettlementFields, PublishTimeFields, StartTimeFields, GenerationFields, GenerationMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class IndicatedDemand(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, DemandFields, BoundaryFields, DatasetMixin, DemandMixin, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class IndicatedGeneration(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, GenerationFields, BoundaryFields, DatasetMixin, GenerationMixin, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class IndicatedImbalance(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, BoundaryFields, DatasetMixin, ImbalanceMixin, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    imbalance: int


class IndicatedMargin(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, BoundaryFields, DatasetMixin, MarginMixin, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    margin: int


class IndicatedForecast(SettlementFields, PublishTimeFields, StartTimeFields, BoundaryFields, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    indicated_generation: Optional[int] = Field(default=None, alias="indicatedGeneration")
    indicated_demand: Optional[int] = Field(default=None, alias="indicatedDemand")
    indicated_margin: Optional[int] = Field(default=None, alias="indicatedMargin")
    indicated_imbalance: Optional[int] = Field(default=None, alias="indicatedImbalance")


class DemandControlInstructionDatasetRow(TimeRangeFields, PublishTimeFields, DatasetFields, VolumeFields, DatasetMixin, MridMixin, VolumeMixin, PublishTimeMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    m_rid: str = Field(alias="mRID", examples=["DCI_202104300853_00000030"])
    revision_number: int = Field(alias="revisionNumber", examples=[1])
    publishing_period_commencing_time: datetime = Field(alias="publishingPeriodCommencingTime", examples=["2021-04-30T08:53:39Z"])
    affected_dso: str = Field(alias="affectedDso", examples=["SP(D)"])
    demand_control_id: str = Field(alias="demandControlId", examples=["00135"])
    instruction_sequence: int = Field(alias="instructionSequence", examples=[1])
    demand_control_event_flag: str = Field(alias="demandControlEventFlag", examples=["I"])
    system_management_action_flag: Optional[str] = Field(default=None, alias="systemManagementActionFlag", examples=["T"])
    amendment_flag: AmendmentflagEnum = Field(alias="amendmentFlag", examples=["ORI"])


class LossOfLoadProbabilityDeratedMarginData(SettlementFields, PublishTimeFields, StartTimeFields, DatasetFields, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    publishing_period_commencing_time: datetime = Field(alias="publishingPeriodCommencingTime", examples=["2023-01-31 17:30Z"])
    loss_of_load_probability: Optional[float] = Field(default=None, alias="lossOfLoadProbability", examples=[0])
    derated_margin: Optional[float] = Field(default=None, alias="deratedMargin", examples=[12570.207])


class SoSoPricesDatasetRow(PublishTimeFields, StartTimeFields, DatasetFields, SettlementDateMixin, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    sender_identification: Optional[str] = Field(default=None, alias="senderIdentification", examples=["10X1001A1001A515"])
    receiver_identification: Optional[str] = Field(default=None, alias="receiverIdentification", examples=["10X1001A1001A59Q"])
    contract_identification: str = Field(alias="contractIdentification", examples=["EG_20210928_1100_1"])
    resource_provider: Optional[str] = Field(default=None, alias="resourceProvider", examples=["EG_20210928_1100_1"])
    trade_direction: TradedirectionEnum = Field(alias="tradeDirection", examples=["A02"])
    trade_quantity: float = Field(alias="tradeQuantity", examples=[25])
    trade_price: float = Field(alias="tradePrice", examples=[30.4])
    trader_unit: str = Field(alias="traderUnit", examples=["EWIC_EG"])
    end_time: Optional[datetime] = Field(default=None, alias="endTime", examples=["2023-09-20 18:30"])
    settlement_date: date = Field(alias="settlementDate", examples=["2023-01-31"])


class SystemFrequency(DatasetFields, DatasetMixin, FrequencyMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    measurement_time: datetime = Field(alias="measurementTime")
    frequency: float


class SystemWarningsData(PublishTimeFields, DatasetFields, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    warning_type: WarningtypeEnum = Field(alias="warningType", examples=["SO-SO TRADES"])
    warning_text: Optional[str] = Field(default=None, alias="warningText", examples=["NATIONAL GRID NOTIFICATION of excess energy prices used for settlement outside of BALIT for SO to SO Transactions"])


class TemperatureData(PublishTimeFields, DatasetFields, DatasetMixin, TemperatureMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    measurement_date: Optional[date] = Field(default=None, alias="measurementDate")
    temperature: float


class TudmDatasetRow(SettlementFields, StartTimeFields, DatasetFields, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    serial_number: Optional[str] = Field(default=None, alias="serialNumber", examples=["000000980321"])
    file_creation_time: Optional[datetime] = Field(default=None, alias="fileCreationTime", examples=["2023-10-19T07:01:07.000"])
    trading_unit_type: Optional[str] = Field(default=None, alias="tradingUnitType", examples=["Base"])
    trading_unit_name: Optional[str] = Field(default=None, alias="tradingUnitName", examples=["DEFAULT__A"])
    settlement_run_type: Optional[SettlementruntypeEnum] = Field(default=None, alias="settlementRunType", examples=["RF"])
    delivery_mode: Optional[DeliverymodeEnum] = Field(default=None, alias="deliveryMode", examples=["Offtaking"])
    import_volume: Optional[float] = Field(default=None, alias="importVolume", examples=[209.95])
    export_volume: Optional[float] = Field(default=None, alias="exportVolume", examples=[-1372.384])
    net_volume: Optional[float] = Field(default=None, alias="netVolume", examples=[-1162.434])


class DemandControlInstructionData(TimeRangeFields, PublishTimeFields, VolumeFields, MridMixin, VolumeMixin, PublishTimeMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    m_rid: str = Field(alias="mRID", examples=["DCI_202104300853_00000030"])
    revision_number: int = Field(alias="revisionNumber", examples=[1])
    publishing_period_commencing_time: datetime = Field(alias="publishingPeriodCommencingTime", examples=["2021-04-30T08:53:39Z"])
    affected_dso: str = Field(alias="affectedDso", examples=["SP(D)"])
    demand_control_id: str = Field(alias="demandControlId", examples=["00135"])
    instruction_sequence: int = Field(alias="instructionSequence", examples=[1])
    demand_control_event_flag: str = Field(alias="demandControlEventFlag", examples=["I"])
    system_management_action_flag: Optional[str] = Field(default=None, alias="systemManagementActionFlag", examples=["T"])
    amendment_flag: AmendmentflagEnum = Field(alias="amendmentFlag", examples=["ORI"])


class LossOfLoadProbabilityDeratedMarginResponse(SettlementFields, PublishTimeFields, StartTimeFields, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    publishing_period_commencing_time: datetime = Field(alias="publishingPeriodCommencingTime", examples=["2023-01-31 17:30"])
    forecast_horizon: Optional[float] = Field(default=None, alias="forecastHorizon", examples=[1])
    loss_of_load_probability: Optional[float] = Field(default=None, alias="lossOfLoadProbability", examples=[0])
    derated_margin: Optional[float] = Field(default=None, alias="deratedMargin", examples=[12570.207])


class SoSoPrices(StartTimeFields, SettlementDateMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    contract_identification: str = Field(alias="contractIdentification", examples=["EG_20210928_1100_1"])
    trade_direction: TradedirectionEnum = Field(alias="tradeDirection", examples=["A02"])
    trade_quantity: float = Field(alias="tradeQuantity", examples=[25])
    trade_price: float = Field(alias="tradePrice", examples=[30.4])
    trader_unit: str = Field(alias="traderUnit", examples=["EWIC_EG"])
    settlement_date: date = Field(alias="settlementDate", examples=["2023-01-31"])


class SystemFrequency_1(FrequencyMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    measurement_time: datetime = Field(alias="measurementTime")
    frequency: float


class SystemWarningsData_1(PublishTimeFields, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    warning_type: WarningtypeEnum = Field(alias="warningType", examples=["IT SYSTEMS OUTAGE"])
    warning_text: Optional[str] = Field(default=None, alias="warningText", examples=["NATIONAL GRID NOTIFICATION of excess energy prices used for settlement outside of BALIT for SO to SO Transactions"])


class TemperatureData_1(PublishTimeFields, TemperatureMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    measurement_date: Optional[date] = Field(default=None, alias="measurementDate")
    temperature: float
    temperature_reference_average: Optional[float] = Field(default=None, alias="temperatureReferenceAverage")
    temperature_reference_high: Optional[float] = Field(default=None, alias="temperatureReferenceHigh")
    temperature_reference_low: Optional[float] = Field(default=None, alias="temperatureReferenceLow")


class BmUnitData(BmUnitMixin, FuelTypeMixin, LeadPartyMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    national_grid_bm_unit: str = Field(alias="nationalGridBmUnit")
    elexon_bm_unit: Optional[str] = Field(default=None, alias="elexonBmUnit")
    eic: Optional[str] = None
    fuel_type: FueltypeEnum = Field(alias="fuelType")
    lead_party_name: str = Field(alias="leadPartyName")
    bm_unit_type: BmunittypeEnum = Field(alias="bmUnitType")
    fpn_flag: Optional[bool] = Field(default=None, alias="fpnFlag")
    bm_unit_name: Optional[str] = Field(default=None, alias="bmUnitName")
    lead_party_id: str = Field(alias="leadPartyId")
    demand_capacity: Optional[str] = Field(default=None, alias="demandCapacity")
    generation_capacity: Optional[str] = Field(default=None, alias="generationCapacity")
    production_or_consumption_flag: Optional[str] = Field(default=None, alias="productionOrConsumptionFlag")
    transmission_loss_factor: Optional[str] = Field(default=None, alias="transmissionLossFactor")
    working_day_credit_assessment_import_capability: Optional[str] = Field(default=None, alias="workingDayCreditAssessmentImportCapability")
    non_working_day_credit_assessment_import_capability: Optional[str] = Field(default=None, alias="nonWorkingDayCreditAssessmentImportCapability")
    working_day_credit_assessment_export_capability: Optional[str] = Field(default=None, alias="workingDayCreditAssessmentExportCapability")
    non_working_day_credit_assessment_export_capability: Optional[str] = Field(default=None, alias="nonWorkingDayCreditAssessmentExportCapability")
    credit_qualifying_status: Optional[bool] = Field(default=None, alias="creditQualifyingStatus")
    demand_in_production_flag: Optional[bool] = Field(default=None, alias="demandInProductionFlag")
    gsp_group_id: str = Field(alias="gspGroupId")
    gsp_group_name: Optional[str] = Field(default=None, alias="gspGroupName")
    interconnector_id: Optional[str] = Field(default=None, alias="interconnectorId")


class DatasetMetadataLatestRow(DatasetFields, DatasetMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    last_updated: Optional[datetime] = Field(default=None, alias="lastUpdated")


class InterconnectorData(InterconnectorMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    interconnector_id: Optional[str] = Field(default=None, alias="interconnectorId")
    interconnector_name: str = Field(alias="interconnectorName")
    interconnector_bidding_zone: Optional[str] = Field(default=None, alias="interconnectorBiddingZone")


class BalancingServicesVolume_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BalancingServicesVolume]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class BidOfferAcceptancesResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BidOfferAcceptancesResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class BidOfferResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[BidOfferResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DisaggregatedBalancingServicesAdjustmentDetailsResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DisaggregatedBalancingServicesAdjustmentDetailsResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DisaggregatedBalancingServicesAdjustmentSummaryResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DisaggregatedBalancingServicesAdjustmentSummaryResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DynamicData_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DynamicData]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class RateData_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RateData]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class MarketIndexResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[MarketIndexResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class NetBalancingServicesAdjustmentResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[NetBalancingServicesAdjustmentResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class NonBmStorResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[NonBmStorResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class PhysicalData_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[PhysicalData]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class AcceptanceVolumeResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AcceptanceVolumeResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class HistoricAcceptanceResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[HistoricAcceptanceResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class IndicativeCashflowResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicativeCashflowResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class IndicativeVolumeResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicativeVolumeResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class MarketDepthResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[MarketDepthResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class SettlementMessageResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SettlementMessageResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class SettlementStackResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SettlementStackResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class SystemPriceResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SystemPriceResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandForecastDaily_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastDaily]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandForecastDayAhead_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastDayAhead]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandForecastPeak_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastPeak]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandForecastWeekly_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandForecastWeekly]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandOutturn_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandOutturn]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandOutturnPeak_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandOutturnPeak]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class IndicativeDemandPeak_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicativeDemandPeak]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class IndodRow_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndodRow]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class RollingSystemDemand_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RollingSystemDemand]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ForecastMarginDaily_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastMarginDaily]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ForecastMarginWeekly_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastMarginWeekly]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ForecastSurplusDaily_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastSurplusDaily]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ForecastSurplusWeekly_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ForecastSurplusWeekly]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class AvailabilityDaily_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityDaily]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class AvailabilityWeekly_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[AvailabilityWeekly]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class HalfHourlyInterconnectorOutturn_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[HalfHourlyInterconnectorOutturn]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class WindGenerationForecast_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[WindGenerationForecast]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class IndicatedForecast_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[IndicatedForecast]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DemandControlInstructionData_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DemandControlInstructionData]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class LossOfLoadProbabilityDeratedMarginResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[LossOfLoadProbabilityDeratedMarginResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class SoSoPrices_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SoSoPrices]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class SystemFrequency_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SystemFrequency]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class SystemWarningsData_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[SystemWarningsData]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class TemperatureData_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[TemperatureData]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class RestorationZoneDemandRestoredDatasetRow_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RestorationZoneDemandRestoredDatasetRow]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class TotalExemptSupplyVolumeResponse_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[TotalExemptSupplyVolumeResponse]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ActualGenerationBySettlementPeriod_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualGenerationBySettlementPeriod]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ActualGenerationWindSolar_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualGenerationWindSolar]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class ActualTotalLoadPerBiddingZone_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[ActualTotalLoadPerBiddingZone]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DayAheadAggregatedGeneration_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DayAheadAggregatedGeneration]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DayAheadGenerationForWindAndSolar_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DayAheadGenerationForWindAndSolar]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class DayAheadTotalLoadPerBiddingZone_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[DayAheadTotalLoadPerBiddingZone]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class RemitMessageIdentifierWithUrl_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RemitMessageIdentifierWithUrl]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class RemitMessageWithId_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[RemitMessageWithId]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class WeekAheadTotalLoadPerBiddingZone_ResponseWithMetadata(BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    data: Optional[List[WeekAheadTotalLoadPerBiddingZone]] = None
    metadata: Optional[ApiResponseSourceMetadata] = None


class RestorationZoneDemandForecastDatasetRow(PublishTimeFields, DatasetFields, SettlementDateMixin, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    submission_date_time: Optional[datetime] = Field(default=None, alias="submissionDateTime", examples=["2025-01-01T07:01:07"])
    settlement_date: date = Field(alias="settlementDate", examples=["2025-01-02"])
    region: Optional[str] = Field(default=None, examples=["North Scotland"])
    gsp_group_id: str = Field(alias="gspGroupId", examples=["_A"])
    forecast_demand60: Optional[int] = Field(default=None, alias="forecastDemand60", examples=[1234])
    forecast_demand100: Optional[int] = Field(default=None, alias="forecastDemand100", examples=[12345])


class RestorationZoneDemandRestoredDatasetRow(PublishTimeFields, DatasetFields, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    submission_date_time: Optional[datetime] = Field(default=None, alias="submissionDateTime", examples=["2025-01-01T07:01:07"])
    region: Optional[str] = Field(default=None, examples=["North Scotland"])
    gsp_group_id: str = Field(alias="gspGroupId", examples=["_A"])
    restored_demand: Optional[int] = Field(default=None, alias="restoredDemand", examples=[1234])


class TotalExemptSupplyVolumeResponse(SettlementFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    creation_time: Optional[datetime] = Field(default=None, alias="creationTime", examples=["2025-01-16T15:31:12Z"])
    settlement_run_type: Optional[SettlementruntypeEnum] = Field(default=None, alias="settlementRunType", examples=["R1"])
    total_exempt_supply_volume: Optional[float] = Field(default=None, alias="totalExemptSupplyVolume", examples=[505.3])


class ActualGenerationBySettlementPeriod(StartTimeFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    settlement_period: int = Field(alias="settlementPeriod", examples=[16])
    data: Optional[List[ActualGenerationValue]] = None


class ActualGenerationValue(QuantityFields, BusinessTypeMixin, PsrTypeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Solar generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Solar"])


class ActualGenerationWindSolar(SettlementFields, PublishTimeFields, StartTimeFields, QuantityFields, BusinessTypeMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Solar generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Solar"])


class ActualTotalLoadPerBiddingZone(SettlementFields, PublishTimeFields, StartTimeFields, QuantityFields, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class AgptSummaryData(PsrTypeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    psr_type: PsrtypeEnum = Field(alias="psrType")
    half_hour_usage: Optional[float] = Field(default=None, alias="halfHourUsage")
    half_hour_percentage: Optional[float] = Field(default=None, alias="halfHourPercentage")
    twenty_four_hour_usage: Optional[float] = Field(default=None, alias="twentyFourHourUsage")
    twenty_four_hour_percentage: Optional[float] = Field(default=None, alias="twentyFourHourPercentage")


class AbucDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, QuantityFields, SettlementDateMixin, BusinessTypeMixin, DatasetMixin, FlowDirectionMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Replacement reserve"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Generation"])
    market_agreement_type: MarketagreementtypeEnum = Field(alias="marketAgreementType", examples=["Daily"])
    flow_direction: FlowdirectionEnum = Field(alias="flowDirection", examples=["Up"])
    settlement_date: date = Field(alias="settlementDate", examples=["2023-08-23"])


class ActualAggregatedGenerationPerTypeDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, BusinessTypeMixin, DatasetMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Solar generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Solar"])


class ActualGenerationOutputPerGenerationUnitDatasetResponse(SettlementFields, DatasetFields, QuantityFields, BmUnitMixin, DatasetMixin, PsrTypeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Generation"])
    bm_unit: str = Field(alias="bmUnit", examples=["T_CNQPS-1"])
    national_grid_bm_unit_id: str = Field(alias="nationalGridBmUnitId", examples=["CNQPS-1"])
    half_hour_end_time: datetime = Field(alias="halfHourEndTime", examples=["2022-08-12T04:00:00Z"])


class ActualGenerationWindSolarDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, BusinessTypeMixin, DatasetMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Solar generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Solar"])


class ActualTotalLoadPerBiddingZoneDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, DatasetMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class AobeDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, DatasetMixin, FlowDirectionMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time_series_id: str = Field(alias="timeSeriesId", examples=["NGET-EMFIP-AOBE-36758603"])
    flow_direction: FlowdirectionEnum = Field(alias="flowDirection", examples=["Up"])
    secondary_quantity: Optional[float] = Field(default=None, alias="secondaryQuantity", examples=[45.831])


class BebDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, DatasetMixin, FlowDirectionMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    bid_id: str = Field(alias="bidId", examples=["NGET-EMFIP-BEB-TS-36758603"])
    flow_direction: FlowdirectionEnum = Field(alias="flowDirection", examples=["Up"])
    energy_price: float = Field(alias="energyPrice", examples=[150])


class CbsDatasetRow(SettlementFields, TimeRangeFields, DocumentFields, PublishTimeFields, DatasetFields, QuantityFields, DatasetMixin, FlowDirectionMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    flow_direction: FlowdirectionEnum = Field(alias="flowDirection", examples=["Up"])


class CostsOfCongestionManagementDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, YearFields, BusinessTypeMixin, DatasetMixin, YearMixin, MonthMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Congestion costs"])
    month: Optional[str] = Field(default=None, examples=["OCT"])
    amount: float = Field(examples=[1.08])


class DayAheadAggregatedGenerationDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, DatasetMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DayAheadGenerationForWindAndSolarDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, BusinessTypeMixin, DatasetMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    process_type: ProcesstypeEnum = Field(alias="processType", examples=["Intraday process"])
    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Wind generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Wind Offshore"])


class DayAheadTotalLoadPerBiddingZoneDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, DatasetMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class FeibDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, YearFields, DatasetMixin, YearMixin, MonthMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    status: Optional[str] = Field(default=None, examples=["Intermediate"])
    month: Optional[str] = Field(default=None, examples=["JUL"])
    amount: float = Field(examples=[77112420])
    price_direction: Optional[str] = Field(default=None, alias="priceDirection", examples=["Expenditure"])


class IgcaDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, QuantityFields, YearFields, BusinessTypeMixin, DatasetMixin, YearMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Installed generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Hydro Pumped Storage"])


class IgcpuDatasetRow(PublishTimeFields, DatasetFields, BmUnitMixin, DatasetMixin, PsrTypeMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    document_id: str = Field(alias="documentId", examples=["NGET-EMFIP-CONF-00688811"])
    effective_from: Optional[date] = Field(default=None, alias="effectiveFrom", examples=["2023-08-07"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Other"])
    registered_resource_eic_code: Optional[str] = Field(default=None, alias="registeredResourceEicCode", examples=["48WVPI-TRAD-BMUI"])
    registered_resource_name: Optional[str] = Field(default=None, alias="registeredResourceName", examples=["DBAWO-1"])
    bm_unit: str = Field(alias="bmUnit", examples=["T_DBAWO-1"])
    voltage_limit: Optional[float] = Field(default=None, alias="voltageLimit", examples=[2234.1])
    installed_capacity: Optional[float] = Field(default=None, alias="installedCapacity", examples=[1928.2])


class MonthAheadTotalLoadPerBiddingZoneDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    forecast_week_commencing_date: Optional[date] = Field(default=None, alias="forecastWeekCommencingDate", examples=["2023-05-29"])
    forecast_year: int = Field(alias="forecastYear", examples=[2023])
    forecast_month: Optional[str] = Field(default=None, alias="forecastMonth", examples=["JUN"])
    minimum_possible: float = Field(alias="minimumPossible", examples=[18034])
    maximum_available: float = Field(alias="maximumAvailable", examples=[35011])


class PbcDatasetRow(SettlementFields, DocumentFields, PublishTimeFields, StartTimeFields, DatasetFields, QuantityFields, DatasetMixin, FlowDirectionMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    time_series_id: str = Field(alias="timeSeriesId", examples=["NGET-EMFIP-PBC-TS-36758603"])
    flow_direction: FlowdirectionEnum = Field(alias="flowDirection", examples=["Up"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Generation"])
    procurement_price: float = Field(alias="procurementPrice", examples=[150])


class PpbrDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, SettlementDateMixin, DatasetMixin, FlowDirectionMixin, PsrTypeMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Generation"])
    market_agreement_type: MarketagreementtypeEnum = Field(alias="marketAgreementType", examples=["Daily"])
    flow_direction: FlowdirectionEnum = Field(alias="flowDirection", examples=["Up"])
    settlement_date: date = Field(alias="settlementDate", examples=["2023-08-23"])
    amount: float = Field(examples=[1.2])


class WeekAheadTotalLoadPerBiddingZoneDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, ForecastDateFields, DatasetMixin, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    forecast_week: int = Field(alias="forecastWeek", examples=[30])
    minimum_possible: float = Field(alias="minimumPossible", examples=[18034])
    maximum_available: float = Field(alias="maximumAvailable", examples=[35011])


class YearAheadForecastMarginDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, QuantityFields, YearFields, BusinessTypeMixin, DatasetMixin, YearMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Positive forecast margin"])


class YearAheadTotalLoadPerBiddingZoneDatasetRow(DocumentFields, PublishTimeFields, DatasetFields, DatasetMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    forecast_year: int = Field(alias="forecastYear", examples=[2023])
    forecast_week: int = Field(alias="forecastWeek", examples=[30])
    minimum_possible: float = Field(alias="minimumPossible", examples=[18034])
    maximum_available: float = Field(alias="maximumAvailable", examples=[35011])


class DayAheadAggregatedGeneration(SettlementFields, PublishTimeFields, StartTimeFields, QuantityFields, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class DayAheadGenerationForWindAndSolar(SettlementFields, PublishTimeFields, StartTimeFields, QuantityFields, BusinessTypeMixin, PsrTypeMixin, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    process_type: ProcesstypeEnum = Field(alias="processType", examples=["Intraday process"])
    business_type: BusinesstypeEnum = Field(alias="businessType", examples=["Wind generation"])
    psr_type: PsrtypeEnum = Field(alias="psrType", examples=["Wind Offshore"])


class DayAheadTotalLoadPerBiddingZone(SettlementFields, PublishTimeFields, StartTimeFields, QuantityFields, PublishTimeMixin, QuantityMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)



class OutageProfileData(StartTimeFields, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    end_time: Optional[datetime] = Field(default=None, alias="endTime")
    capacity: Optional[float] = None


class RemitMessage(PublishTimeFields, DatasetFields, AffectedUnitMixin, AssetMixin, CapacityMixin, DatasetMixin, EventMixin, EventTimeMixin, FuelTypeMixin, MessageMixin, MridMixin, ParticipantMixin, BiddingZoneMixin, PublishTimeMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    mrid: str = Field(examples=["11XINNOGY------2-NGET-RMT-00084421"])
    revision_number: int = Field(alias="revisionNumber", examples=[25])
    created_time: datetime = Field(alias="createdTime", examples=["2023-01-31T17:39:15Z"])
    message_type: MessagetypeEnum = Field(alias="messageType", examples=["UnavailabilitiesOfElectricityFacilities"])
    message_heading: str = Field(alias="messageHeading", examples=["Planned Unavailability of Generation Unit"])
    event_type: EventtypeEnum = Field(alias="eventType", examples=["Production unavailability"])
    unavailability_type: UnavailabilitytypeEnum = Field(alias="unavailabilityType", examples=["Planned"])
    participant_id: str = Field(alias="participantId", examples=["11XINNOGY------2"])
    registration_code: Optional[str] = Field(default=None, alias="registrationCode", examples=["11XINNOGY------2"])
    asset_id: str = Field(alias="assetId", examples=["T_DIDCB5"])
    asset_type: AssettypeEnum = Field(alias="assetType", examples=["Production"])
    affected_unit: str = Field(alias="affectedUnit", examples=["DIDCB5"])
    affected_unit_eic: Optional[str] = Field(default=None, alias="affectedUnitEIC", examples=["48W000000DIDCB5C"])
    affected_area: str = Field(alias="affectedArea", examples=["N"])
    bidding_zone: str = Field(alias="biddingZone", examples=["10YGB----------A"])
    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["Fossil Gas"])
    normal_capacity: float = Field(alias="normalCapacity", examples=[780])
    available_capacity: float = Field(alias="availableCapacity", examples=[320])
    unavailable_capacity: float = Field(alias="unavailableCapacity", examples=[361])
    event_status: EventstatusEnum = Field(alias="eventStatus", examples=["Inactive"])
    event_start_time: datetime = Field(alias="eventStartTime", examples=["2022-08-23T06:59:00Z"])
    event_end_time: datetime = Field(alias="eventEndTime", examples=["2022-08-25T05:20:30Z"])
    duration_uncertainty: Optional[str] = Field(default=None, alias="durationUncertainty", examples=["+- 1 day"])
    cause: str = Field(examples=["Other"])
    related_information: Optional[str] = Field(default=None, alias="relatedInformation", examples=["Status changed to Completed"])
    outage_profile: Optional[List[OutageProfileData]] = Field(default=None, alias="outageProfile", examples=[[{'startTime': '2023-02-03T21:06:31.000Z', 'endTime': '2023-02-03T21:10:00.000Z', 'capacity': 436}]])


class RemitMessageIdentifierWithUrl(PublishTimeFields, MridMixin, PublishTimeMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    id: int = Field(examples=[24])
    mrid: str = Field(examples=["11XINNOGY------2-NGET-RMT-00084421"])
    revision_number: int = Field(alias="revisionNumber", examples=[2])
    created_time: datetime = Field(alias="createdTime", examples=["2023-01-31T17:39:15Z"])
    url: Optional[str] = Field(default=None, examples=["https://data.elexon.co.uk/bmrs/api/v1/remit/24"])


class RemitMessageWithId(PublishTimeFields, DatasetFields, AffectedUnitMixin, AssetMixin, CapacityMixin, DatasetMixin, EventMixin, EventTimeMixin, FuelTypeMixin, MessageMixin, MridMixin, ParticipantMixin, BiddingZoneMixin, PublishTimeMixin, RevisionMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    mrid: str = Field(examples=["11XINNOGY------2-NGET-RMT-00084421"])
    revision_number: int = Field(alias="revisionNumber", examples=[25])
    created_time: datetime = Field(alias="createdTime", examples=["2023-01-31T17:39:15Z"])
    message_type: MessagetypeEnum = Field(alias="messageType", examples=["UnavailabilitiesOfElectricityFacilities"])
    message_heading: str = Field(alias="messageHeading", examples=["Planned Unavailability of Generation Unit"])
    event_type: EventtypeEnum = Field(alias="eventType", examples=["Production unavailability"])
    unavailability_type: UnavailabilitytypeEnum = Field(alias="unavailabilityType", examples=["Planned"])
    participant_id: str = Field(alias="participantId", examples=["11XINNOGY------2"])
    registration_code: Optional[str] = Field(default=None, alias="registrationCode", examples=["11XINNOGY------2"])
    asset_id: str = Field(alias="assetId", examples=["T_DIDCB5"])
    asset_type: AssettypeEnum = Field(alias="assetType", examples=["Production"])
    affected_unit: str = Field(alias="affectedUnit", examples=["DIDCB5"])
    affected_unit_eic: Optional[str] = Field(default=None, alias="affectedUnitEIC", examples=["48W000000DIDCB5C"])
    affected_area: str = Field(alias="affectedArea", examples=["N"])
    bidding_zone: str = Field(alias="biddingZone", examples=["10YGB----------A"])
    fuel_type: FueltypeEnum = Field(alias="fuelType", examples=["Fossil Gas"])
    normal_capacity: float = Field(alias="normalCapacity", examples=[780])
    available_capacity: float = Field(alias="availableCapacity", examples=[320])
    unavailable_capacity: float = Field(alias="unavailableCapacity", examples=[361])
    event_status: EventstatusEnum = Field(alias="eventStatus", examples=["Inactive"])
    event_start_time: datetime = Field(alias="eventStartTime", examples=["2022-08-23T06:59:00Z"])
    event_end_time: datetime = Field(alias="eventEndTime", examples=["2022-08-25T05:20:30Z"])
    duration_uncertainty: Optional[str] = Field(default=None, alias="durationUncertainty", examples=["+- 1 day"])
    cause: str = Field(examples=["Other"])
    related_information: Optional[str] = Field(default=None, alias="relatedInformation", examples=["Status changed to Completed"])
    outage_profile: Optional[List[OutageProfileData]] = Field(default=None, alias="outageProfile", examples=[[{'startTime': '2023-02-03T21:06:31.000Z', 'endTime': '2023-02-03T21:10:00.000Z', 'capacity': 436}]])
    id: int = Field(examples=[1])


class WeekAheadTotalLoadPerBiddingZone(PublishTimeFields, ForecastDateFields, ForecastDateMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    forecast_week: int = Field(alias="forecastWeek", examples=[30])
    minimum_possible: float = Field(alias="minimumPossible", examples=[18034])
    maximum_available: float = Field(alias="maximumAvailable", examples=[35011])


class DayAheadDemandForecastRow(SettlementFields, PublishTimeFields, StartTimeFields, BoundaryFields, BoundaryMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

    transmission_system_demand: int = Field(alias="transmissionSystemDemand")
    national_demand: int = Field(alias="nationalDemand")


class WindGenerationForecastRow(SettlementFields, PublishTimeFields, StartTimeFields, GenerationFields, GenerationMixin, PublishTimeMixin, BaseModel):
    model_config = ConfigDict(extra='allow', populate_by_name=True)

