use serde::{Deserialize, Serialize};
use crate::types::{
AttrV, AttrVWithScheme, ControlZone, Direction, DocumentId, DocumentVersion,
MarketParticipantId, MarketRoleType, MeasureUnit, Period, TimeInterval, UtcDateTime,
};
pub const NAMESPACE: &str = "urn:entsoe.eu:wgedi:errp:activationdocument:5:0";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ActivationDocType {
#[serde(rename = "A41")]
ActivationResponse,
#[serde(rename = "A42")]
TenderReduction,
#[serde(rename = "A96")]
RedispatchActivation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ActivationProcessType {
#[serde(rename = "A41")]
Redispatch,
#[serde(rename = "Z01")]
Other,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum TimeSeriesStatus {
#[serde(rename = "A06")]
Available,
#[serde(rename = "A07")]
Activated,
#[serde(rename = "A10")]
Ordered,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum TimeSeriesBusinessType {
#[serde(rename = "A46")]
SystemOperatorRedispatching,
#[serde(rename = "A85")]
InternalRedispatch,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum DocumentReasonCode {
#[serde(rename = "A57")]
DeadlineExceeded,
#[serde(rename = "A95")]
ComplementaryInfo,
#[serde(rename = "A96")]
TechnicalConstraint,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DocumentReason {
#[serde(rename = "ReasonCode")]
pub code: AttrV<DocumentReasonCode>,
#[serde(
rename = "ReasonText",
default,
skip_serializing_if = "Option::is_none"
)]
pub text: Option<String>,
}
pub type ResourceObjectRef = AttrVWithScheme<String, ResourceObjectCodingScheme>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ResourceObjectCodingScheme {
#[serde(rename = "NDE")]
Nde,
}
pub type ControlZoneRef = AttrVWithScheme<ControlZone, EicCodingScheme>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EicCodingScheme {
#[serde(rename = "A01")]
Eic,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ActivationTimeSeries {
#[serde(rename = "AllocationIdentification")]
pub allocation_identification: AttrV<DocumentId>,
#[serde(
rename = "ResourceProvider",
default,
skip_serializing_if = "Option::is_none"
)]
pub resource_provider: Option<AttrVWithScheme<MarketParticipantId>>,
#[serde(rename = "BusinessType")]
pub business_type: AttrV<TimeSeriesBusinessType>,
#[serde(rename = "AcquiringArea")]
pub acquiring_area: AttrVWithScheme<String, EicCodingScheme>,
#[serde(rename = "ConnectingArea")]
pub connecting_area: ControlZoneRef,
#[serde(rename = "MeasureUnit")]
pub measure_unit: AttrV<MeasureUnit>,
#[serde(rename = "Direction")]
pub direction: AttrV<Direction>,
#[serde(rename = "Status")]
pub status: AttrV<TimeSeriesStatus>,
#[serde(rename = "ResourceObject")]
pub resource_object: ResourceObjectRef,
#[serde(
rename = "SendersDocumentIdentification",
default,
skip_serializing_if = "Option::is_none"
)]
pub senders_document_identification: Option<AttrV<DocumentId>>,
#[serde(
rename = "SendersDocumentVersion",
default,
skip_serializing_if = "Option::is_none"
)]
pub senders_document_version: Option<AttrV<DocumentVersion>>,
#[serde(
rename = "SendersDocumentDateTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub senders_document_date_time: Option<AttrV<UtcDateTime>>,
#[serde(
rename = "SendersTimeSeriesIdentification",
default,
skip_serializing_if = "Option::is_none"
)]
pub senders_time_series_identification: Option<AttrV<DocumentId>>,
#[serde(
rename = "OriginalSenderIdentification",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_sender_identification: Option<AttrVWithScheme<MarketParticipantId>>,
#[serde(
rename = "OriginalDocumentIdentification",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_document_identification: Option<AttrV<DocumentId>>,
#[serde(
rename = "OriginalDocumentVersion",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_document_version: Option<AttrV<DocumentVersion>>,
#[serde(
rename = "OriginalDocumentDateTime",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_document_date_time: Option<AttrV<UtcDateTime>>,
#[serde(
rename = "OriginalAllocationIdentification",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_allocation_identification: Option<AttrV<DocumentId>>,
#[serde(rename = "Period")]
pub period: Period,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename = "ActivationDocument")]
pub struct ActivationDocument {
#[serde(rename = "DocumentIdentification")]
pub document_identification: AttrV<DocumentId>,
#[serde(rename = "DocumentVersion")]
pub document_version: AttrV<DocumentVersion>,
#[serde(rename = "DocumentType")]
pub document_type: AttrV<ActivationDocType>,
#[serde(rename = "ProcessType")]
pub process_type: AttrV<ActivationProcessType>,
#[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 = "CreationDateTime")]
pub creation_date_time: AttrV<UtcDateTime>,
#[serde(rename = "ActivationTimeInterval")]
pub activation_time_interval: AttrV<TimeInterval>,
#[serde(
rename = "OrderIdentification",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_identification: Option<AttrV<DocumentId>>,
#[serde(
rename = "OrderIdentificationVersion",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_identification_version: Option<AttrV<DocumentVersion>>,
#[serde(rename = "ActivationTimeSeries", default)]
pub time_series: Vec<ActivationTimeSeries>,
#[serde(rename = "Reason", default, skip_serializing_if = "Option::is_none")]
pub reason: Option<DocumentReason>,
}