use serde::{Deserialize, Serialize};
use crate::documents::activation::{ControlZoneRef, EicCodingScheme};
use crate::types::{
AttrV, AttrVWithScheme, Direction, DocumentId, DocumentVersion, MarketParticipantId,
MarketRoleType, MeasureUnit, Period, TimeInterval, UtcDateTime,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PrsDocType {
#[serde(rename = "A14")]
DayAheadPlan,
#[serde(rename = "Z08")]
IntradayPlan,
#[serde(rename = "Z09")]
StammdatenPlan,
#[serde(rename = "Z11")]
AggregatePlan,
#[serde(rename = "Z12")]
CorrectedPlan,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PrsProcessType {
#[serde(rename = "A14")]
Forecast,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PrsBusinessType {
#[serde(rename = "A01")]
Production,
#[serde(rename = "A04")]
Consumption,
#[serde(rename = "A10")]
GenerationForecast,
#[serde(rename = "A11")]
ConsumptionForecast,
#[serde(rename = "A12")]
GenerationSchedule,
#[serde(rename = "A46")]
SystemOperatorRedispatching,
#[serde(rename = "A60")]
TransmissionCapacity,
#[serde(rename = "A61")]
ExchangeSchedule,
#[serde(rename = "A77")]
ProductionDispatchable,
#[serde(rename = "A79")]
ConsumptionDispatchable,
#[serde(rename = "A85")]
InternalRedispatch,
#[serde(rename = "A93")]
ControllableGeneration,
#[serde(rename = "A94")]
ControllableConsumption,
#[serde(rename = "B59")]
NetworkElement,
#[serde(rename = "Z05")]
Flexibility,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PrsTimeSeriesStatus {
#[serde(rename = "A07")]
Activated,
#[serde(rename = "A36")]
Planned,
#[serde(rename = "Z06")]
Demand,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Product {
#[serde(rename = "8716867000016")]
ActivePower,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum GridElementCodingScheme {
#[serde(rename = "A01")]
Eic,
#[serde(rename = "A02")]
NationalResource,
#[serde(rename = "Z01")]
Other,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PlannedResourceTimeSeries {
#[serde(rename = "TimeSeriesIdentification")]
pub time_series_identification: AttrV<DocumentId>,
#[serde(rename = "BusinessType")]
pub business_type: AttrV<PrsBusinessType>,
#[serde(rename = "Direction", default, skip_serializing_if = "Option::is_none")]
pub direction: Option<AttrV<Direction>>,
#[serde(
rename = "ConnectingArea",
default,
skip_serializing_if = "Option::is_none"
)]
pub connecting_area: Option<ControlZoneRef>,
#[serde(
rename = "ResourceObject",
default,
skip_serializing_if = "Option::is_none"
)]
pub resource_object: Option<AttrVWithScheme<String, GridElementCodingScheme>>,
#[serde(rename = "Product")]
pub product: AttrV<Product>,
#[serde(
rename = "AcquiringArea",
default,
skip_serializing_if = "Option::is_none"
)]
pub acquiring_area: Option<AttrVWithScheme<String, EicCodingScheme>>,
#[serde(
rename = "GridElement",
default,
skip_serializing_if = "Option::is_none"
)]
pub grid_element: Option<AttrVWithScheme<String, GridElementCodingScheme>>,
#[serde(rename = "MeasureUnit")]
pub measure_unit: AttrV<MeasureUnit>,
#[serde(rename = "Status", default, skip_serializing_if = "Option::is_none")]
pub status: Option<AttrV<PrsTimeSeriesStatus>>,
#[serde(
rename = "ResourceProvider",
default,
skip_serializing_if = "Option::is_none"
)]
pub resource_provider: Option<AttrVWithScheme<MarketParticipantId>>,
#[serde(rename = "Period")]
pub period: Period,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename = "PlannedResourceScheduleDocument")]
pub struct PlannedResourceScheduleDocument {
#[serde(rename = "DocumentIdentification")]
pub document_identification: AttrV<DocumentId>,
#[serde(rename = "DocumentVersion")]
pub document_version: AttrV<DocumentVersion>,
#[serde(rename = "DocumentType")]
pub document_type: AttrV<PrsDocType>,
#[serde(rename = "ProcessType")]
pub process_type: AttrV<PrsProcessType>,
#[serde(rename = "SenderIdentification")]
pub sender_identification: AttrVWithScheme<MarketParticipantId>,
#[serde(rename = "SenderRole")]
pub sender_role: AttrV<MarketRoleType>,
#[serde(rename = "ReceiverIdentification")]
pub receiver_identification: AttrVWithScheme<MarketParticipantId>,
#[serde(rename = "ReceiverRole")]
pub receiver_role: AttrV<MarketRoleType>,
#[serde(rename = "DocumentDateTime")]
pub document_date_time: AttrV<UtcDateTime>,
#[serde(rename = "TimePeriodCovered")]
pub time_period_covered: AttrV<TimeInterval>,
#[serde(rename = "PlannedResourceTimeSeries", default)]
pub time_series: Vec<PlannedResourceTimeSeries>,
}