redispatch_xml/documents/
unavailability.rs1use serde::{Deserialize, Serialize};
2
3use crate::documents::activation::EicCodingScheme;
4use crate::documents::kaskade::ParticipantMrid;
5use crate::types::{Mrid, RevisionNumber, SimpleContent, UtcDateTime, UtcMinuteDateTime};
6
7pub const NAMESPACE: &str = "urn:iec62325.351:tc57wg16:451-6:outagedocument:3:0";
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
16pub enum UnavailabilityDocType {
17 #[serde(rename = "A67")]
19 PlannedUnavailability,
20 #[serde(rename = "A76")]
22 ForcedUnavailability,
23 #[serde(rename = "A80")]
25 ProductionUnavailability,
26}
27
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
30pub enum UnavailabilityProcessType {
31 #[serde(rename = "A14")]
33 Forecast,
34 #[serde(rename = "A26")]
36 OutageInfo,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
41pub enum UnavailabilityBusinessType {
42 #[serde(rename = "A01")]
44 Production,
45 #[serde(rename = "A53")]
47 PlannedMaintenance,
48 #[serde(rename = "A54")]
50 UnplannedOutage,
51}
52
53#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
55pub enum UnavailabilitySenderRole {
56 #[serde(rename = "A27")]
58 ResourceProvider,
59 #[serde(rename = "A39")]
61 DataProvider,
62}
63
64#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
66pub enum UnavailabilityReceiverRole {
67 #[serde(rename = "A18")]
69 GridOperator,
70 #[serde(rename = "A39")]
72 DataProvider,
73}
74
75#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
79pub enum UnavailabilityMarketRoleType {
80 #[serde(rename = "A18")]
82 GridOperator,
83 #[serde(rename = "A27")]
85 ResourceProvider,
86 #[serde(rename = "A39")]
88 DataProvider,
89}
90
91#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
93pub struct UnavailabilityMarketRole {
94 #[serde(rename = "type")]
95 pub role_type: UnavailabilityMarketRoleType,
96}
97
98#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100pub struct UnavailabilityParticipant {
101 #[serde(rename = "mRID")]
102 pub m_rid: ParticipantMrid,
103 #[serde(rename = "marketRole")]
104 pub market_role: UnavailabilityMarketRole,
105}
106
107#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
112pub struct UnavailabilityTimeInterval {
113 pub start: UtcMinuteDateTime,
115 pub end: UtcMinuteDateTime,
117}
118
119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
121pub struct UnavailabilityTimePeriod {
122 #[serde(rename = "timeInterval")]
123 pub time_interval: UnavailabilityTimeInterval,
124}
125
126#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
130pub struct DocStatus {
131 pub value: String,
133}
134
135pub type UnavailabilityBiddingZone = SimpleContent<String, EicCodingScheme>;
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
142pub struct UnavailabilityBiddingZoneDomain {
143 #[serde(rename = "mRID")]
144 pub m_rid: UnavailabilityBiddingZone,
145}
146
147#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
154pub struct UnavailabilityTimeSeries {
155 #[serde(rename = "mRID")]
157 pub m_rid: Mrid,
158 #[serde(
160 rename = "original_sender_MarketParticipant.mRID",
161 default,
162 skip_serializing_if = "Option::is_none"
163 )]
164 pub original_sender_m_rid: Option<ParticipantMrid>,
165 #[serde(
167 rename = "original_document_mRID",
168 default,
169 skip_serializing_if = "Option::is_none"
170 )]
171 pub original_document_m_rid: Option<Mrid>,
172 #[serde(
174 rename = "original_revisionNumber",
175 default,
176 skip_serializing_if = "Option::is_none"
177 )]
178 pub original_revision_number: Option<RevisionNumber>,
179 #[serde(
181 rename = "original_createdDateTime",
182 default,
183 skip_serializing_if = "Option::is_none"
184 )]
185 pub original_created_date_time: Option<UtcDateTime>,
186 #[serde(
188 rename = "original_timeseries_mRID",
189 default,
190 skip_serializing_if = "Option::is_none"
191 )]
192 pub original_timeseries_m_rid: Option<Mrid>,
193 #[serde(rename = "businessType")]
195 pub business_type: UnavailabilityBusinessType,
196 #[serde(rename = "biddingZone_Domain")]
198 pub bidding_zone_domain: UnavailabilityBiddingZoneDomain,
199 #[serde(rename = "start_DateAndOrTime.date")]
201 pub start_date: String,
202 #[serde(rename = "start_DateAndOrTime.time")]
204 pub start_time: String,
205 #[serde(rename = "end_DateAndOrTime.date")]
207 pub end_date: String,
208 #[serde(rename = "end_DateAndOrTime.time")]
210 pub end_time: String,
211}
212
213#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
224#[serde(rename = "Unavailability_MarketDocument")]
225pub struct UnavailabilityMarketDocument {
226 #[serde(rename = "mRID")]
228 pub m_rid: Mrid,
229 #[serde(rename = "revisionNumber")]
231 pub revision_number: RevisionNumber,
232 #[serde(rename = "type")]
234 pub doc_type: UnavailabilityDocType,
235 #[serde(rename = "process.processType")]
237 pub process_type: UnavailabilityProcessType,
238 #[serde(rename = "createdDateTime")]
240 pub created_date_time: UtcDateTime,
241 #[serde(rename = "sender_MarketParticipant")]
243 pub sender_market_participant: UnavailabilityParticipant,
244 #[serde(rename = "receiver_MarketParticipant")]
246 pub receiver_market_participant: UnavailabilityParticipant,
247 #[serde(rename = "unavailability_Time_Period")]
249 pub unavailability_time_period: UnavailabilityTimePeriod,
250 #[serde(rename = "docStatus", default, skip_serializing_if = "Option::is_none")]
252 pub doc_status: Option<DocStatus>,
253 #[serde(rename = "TimeSeries", default, skip_serializing_if = "Vec::is_empty")]
255 pub time_series: Vec<UnavailabilityTimeSeries>,
256}