redispatch_xml/documents/
unavailability.rs1use serde::{Deserialize, Serialize};
3
4use crate::documents::activation::EicCodingScheme;
5use crate::documents::kaskade::ParticipantMrid;
6use crate::types::{Mrid, RevisionNumber, SimpleContent, UtcDateTime, UtcMinuteDateTime};
7
8pub const NAMESPACE: &str = "urn:iec62325.351:tc57wg16:451-6:outagedocument:3:0";
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
17pub enum UnavailabilityDocType {
18 #[serde(rename = "A67")]
20 PlannedUnavailability,
21 #[serde(rename = "A76")]
23 ForcedUnavailability,
24 #[serde(rename = "A80")]
26 ProductionUnavailability,
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
31pub enum UnavailabilityProcessType {
32 #[serde(rename = "A14")]
34 Forecast,
35 #[serde(rename = "A26")]
37 OutageInfo,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
42pub enum UnavailabilityBusinessType {
43 #[serde(rename = "A01")]
45 Production,
46 #[serde(rename = "A53")]
48 PlannedMaintenance,
49 #[serde(rename = "A54")]
51 UnplannedOutage,
52}
53
54#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
56pub enum UnavailabilitySenderRole {
57 #[serde(rename = "A27")]
59 ResourceProvider,
60 #[serde(rename = "A39")]
62 DataProvider,
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
67pub enum UnavailabilityReceiverRole {
68 #[serde(rename = "A18")]
70 GridOperator,
71 #[serde(rename = "A39")]
73 DataProvider,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
80pub enum UnavailabilityMarketRoleType {
81 #[serde(rename = "A18")]
83 GridOperator,
84 #[serde(rename = "A27")]
86 ResourceProvider,
87 #[serde(rename = "A39")]
89 DataProvider,
90}
91
92#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
94pub struct UnavailabilityMarketRole {
95 #[serde(rename = "type")]
97 pub role_type: UnavailabilityMarketRoleType,
98}
99
100#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
102pub struct UnavailabilityParticipant {
103 #[serde(rename = "mRID")]
105 pub m_rid: ParticipantMrid,
106 #[serde(rename = "marketRole")]
108 pub market_role: UnavailabilityMarketRole,
109}
110
111#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
116pub struct UnavailabilityTimeInterval {
117 pub start: UtcMinuteDateTime,
119 pub end: UtcMinuteDateTime,
121}
122
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
125pub struct UnavailabilityTimePeriod {
126 #[serde(rename = "timeInterval")]
128 pub time_interval: UnavailabilityTimeInterval,
129}
130
131#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
135pub struct DocStatus {
136 pub value: String,
138}
139
140pub type UnavailabilityBiddingZone = SimpleContent<String, EicCodingScheme>;
144
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
147pub struct UnavailabilityBiddingZoneDomain {
148 #[serde(rename = "mRID")]
150 pub m_rid: UnavailabilityBiddingZone,
151}
152
153#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
160pub struct UnavailabilityTimeSeries {
161 #[serde(rename = "mRID")]
163 pub m_rid: Mrid,
164 #[serde(
166 rename = "original_sender_MarketParticipant.mRID",
167 default,
168 skip_serializing_if = "Option::is_none"
169 )]
170 pub original_sender_m_rid: Option<ParticipantMrid>,
171 #[serde(
173 rename = "original_document_mRID",
174 default,
175 skip_serializing_if = "Option::is_none"
176 )]
177 pub original_document_m_rid: Option<Mrid>,
178 #[serde(
180 rename = "original_revisionNumber",
181 default,
182 skip_serializing_if = "Option::is_none"
183 )]
184 pub original_revision_number: Option<RevisionNumber>,
185 #[serde(
187 rename = "original_createdDateTime",
188 default,
189 skip_serializing_if = "Option::is_none"
190 )]
191 pub original_created_date_time: Option<UtcDateTime>,
192 #[serde(
194 rename = "original_timeseries_mRID",
195 default,
196 skip_serializing_if = "Option::is_none"
197 )]
198 pub original_timeseries_m_rid: Option<Mrid>,
199 #[serde(rename = "businessType")]
201 pub business_type: UnavailabilityBusinessType,
202 #[serde(rename = "biddingZone_Domain")]
204 pub bidding_zone_domain: UnavailabilityBiddingZoneDomain,
205 #[serde(rename = "start_DateAndOrTime.date")]
207 pub start_date: String,
208 #[serde(rename = "start_DateAndOrTime.time")]
210 pub start_time: String,
211 #[serde(rename = "end_DateAndOrTime.date")]
213 pub end_date: String,
214 #[serde(rename = "end_DateAndOrTime.time")]
216 pub end_time: String,
217}
218
219#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
230#[serde(rename = "Unavailability_MarketDocument")]
231pub struct UnavailabilityMarketDocument {
232 #[serde(rename = "mRID")]
234 pub m_rid: Mrid,
235 #[serde(rename = "revisionNumber")]
237 pub revision_number: RevisionNumber,
238 #[serde(rename = "type")]
240 pub doc_type: UnavailabilityDocType,
241 #[serde(rename = "process.processType")]
243 pub process_type: UnavailabilityProcessType,
244 #[serde(rename = "createdDateTime")]
246 pub created_date_time: UtcDateTime,
247 #[serde(rename = "sender_MarketParticipant")]
249 pub sender_market_participant: UnavailabilityParticipant,
250 #[serde(rename = "receiver_MarketParticipant")]
252 pub receiver_market_participant: UnavailabilityParticipant,
253 #[serde(rename = "unavailability_Time_Period")]
255 pub unavailability_time_period: UnavailabilityTimePeriod,
256 #[serde(rename = "docStatus", default, skip_serializing_if = "Option::is_none")]
258 pub doc_status: Option<DocStatus>,
259 #[serde(rename = "TimeSeries", default, skip_serializing_if = "Vec::is_empty")]
261 pub time_series: Vec<UnavailabilityTimeSeries>,
262}