1use serde::{Deserialize, Serialize};
3
4use crate::types::{
5 AttrV, AttrVWithScheme, ControlZone, Direction, DocumentId, DocumentVersion,
6 MarketParticipantId, MarketRoleType, MeasureUnit, Period, TimeInterval, UtcDateTime,
7};
8
9pub const NAMESPACE: &str = "urn:entsoe.eu:wgedi:errp:activationdocument:5:0";
13
14#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
18pub enum ActivationDocType {
19 #[serde(rename = "A41")]
21 ActivationResponse,
22 #[serde(rename = "A42")]
24 TenderReduction,
25 #[serde(rename = "A96")]
27 RedispatchActivation,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
32pub enum ActivationProcessType {
33 #[serde(rename = "A41")]
35 Redispatch,
36 #[serde(rename = "Z01")]
38 Other,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
43pub enum TimeSeriesStatus {
44 #[serde(rename = "A06")]
46 Available,
47 #[serde(rename = "A07")]
49 Activated,
50 #[serde(rename = "A10")]
52 Ordered,
53}
54
55#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
57pub enum TimeSeriesBusinessType {
58 #[serde(rename = "A46")]
60 SystemOperatorRedispatching,
61 #[serde(rename = "A85")]
63 InternalRedispatch,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
71pub enum DocumentReasonCode {
72 #[serde(rename = "A57")]
74 DeadlineExceeded,
75 #[serde(rename = "A95")]
77 ComplementaryInfo,
78 #[serde(rename = "A96")]
80 TechnicalConstraint,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub struct DocumentReason {
86 #[serde(rename = "ReasonCode")]
88 pub code: AttrV<DocumentReasonCode>,
89 #[serde(
91 rename = "ReasonText",
92 default,
93 skip_serializing_if = "Option::is_none"
94 )]
95 pub text: Option<String>,
96}
97
98pub type ResourceObjectRef = AttrVWithScheme<String, ResourceObjectCodingScheme>;
102
103#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
105pub enum ResourceObjectCodingScheme {
106 #[serde(rename = "NDE")]
108 Nde,
109}
110
111pub type ControlZoneRef = AttrVWithScheme<ControlZone, EicCodingScheme>;
113
114#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
116pub enum EicCodingScheme {
117 #[serde(rename = "A01")]
119 Eic,
120}
121
122#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
128pub struct ActivationTimeSeries {
129 #[serde(rename = "AllocationIdentification")]
131 pub allocation_identification: AttrV<DocumentId>,
132 #[serde(
134 rename = "ResourceProvider",
135 default,
136 skip_serializing_if = "Option::is_none"
137 )]
138 pub resource_provider: Option<AttrVWithScheme<MarketParticipantId>>,
139 #[serde(rename = "BusinessType")]
141 pub business_type: AttrV<TimeSeriesBusinessType>,
142 #[serde(rename = "AcquiringArea")]
144 pub acquiring_area: AttrVWithScheme<String, EicCodingScheme>,
145 #[serde(rename = "ConnectingArea")]
147 pub connecting_area: ControlZoneRef,
148 #[serde(rename = "MeasureUnit")]
150 pub measure_unit: AttrV<MeasureUnit>,
151 #[serde(rename = "Direction")]
153 pub direction: AttrV<Direction>,
154 #[serde(rename = "Status")]
156 pub status: AttrV<TimeSeriesStatus>,
157 #[serde(rename = "ResourceObject")]
159 pub resource_object: ResourceObjectRef,
160 #[serde(
162 rename = "SendersDocumentIdentification",
163 default,
164 skip_serializing_if = "Option::is_none"
165 )]
166 pub senders_document_identification: Option<AttrV<DocumentId>>,
167 #[serde(
169 rename = "SendersDocumentVersion",
170 default,
171 skip_serializing_if = "Option::is_none"
172 )]
173 pub senders_document_version: Option<AttrV<DocumentVersion>>,
174 #[serde(
176 rename = "SendersDocumentDateTime",
177 default,
178 skip_serializing_if = "Option::is_none"
179 )]
180 pub senders_document_date_time: Option<AttrV<UtcDateTime>>,
181 #[serde(
183 rename = "SendersTimeSeriesIdentification",
184 default,
185 skip_serializing_if = "Option::is_none"
186 )]
187 pub senders_time_series_identification: Option<AttrV<DocumentId>>,
188 #[serde(
190 rename = "OriginalSenderIdentification",
191 default,
192 skip_serializing_if = "Option::is_none"
193 )]
194 pub original_sender_identification: Option<AttrVWithScheme<MarketParticipantId>>,
195 #[serde(
197 rename = "OriginalDocumentIdentification",
198 default,
199 skip_serializing_if = "Option::is_none"
200 )]
201 pub original_document_identification: Option<AttrV<DocumentId>>,
202 #[serde(
204 rename = "OriginalDocumentVersion",
205 default,
206 skip_serializing_if = "Option::is_none"
207 )]
208 pub original_document_version: Option<AttrV<DocumentVersion>>,
209 #[serde(
211 rename = "OriginalDocumentDateTime",
212 default,
213 skip_serializing_if = "Option::is_none"
214 )]
215 pub original_document_date_time: Option<AttrV<UtcDateTime>>,
216 #[serde(
218 rename = "OriginalAllocationIdentification",
219 default,
220 skip_serializing_if = "Option::is_none"
221 )]
222 pub original_allocation_identification: Option<AttrV<DocumentId>>,
223 #[serde(rename = "Period")]
225 pub period: Period,
226}
227
228#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
244pub struct ScheduleTimeSeries {
245 #[serde(rename = "TimeSeriesIdentification")]
247 pub time_series_identification: AttrV<DocumentId>,
248 #[serde(rename = "BusinessType")]
250 pub business_type: AttrV<String>,
251 #[serde(rename = "Product")]
253 pub product: AttrV<String>,
254 #[serde(rename = "InArea")]
256 pub in_area: AttrVWithScheme<String, EicCodingScheme>,
257 #[serde(rename = "OutArea")]
259 pub out_area: AttrVWithScheme<String, EicCodingScheme>,
260 #[serde(rename = "InParty")]
262 pub in_party: AttrVWithScheme<String, EicCodingScheme>,
263 #[serde(rename = "OutParty")]
265 pub out_party: AttrVWithScheme<String, EicCodingScheme>,
266 #[serde(rename = "MeasurementUnit")]
268 pub measurement_unit: AttrV<MeasureUnit>,
269 #[serde(rename = "Period")]
271 pub period: Period,
272}
273
274#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
287#[serde(rename = "ActivationDocument")]
288pub struct ActivationDocument {
289 #[serde(rename = "DocumentIdentification")]
291 pub document_identification: AttrV<DocumentId>,
292 #[serde(rename = "DocumentVersion")]
294 pub document_version: AttrV<DocumentVersion>,
295 #[serde(rename = "DocumentType")]
297 pub document_type: AttrV<ActivationDocType>,
298 #[serde(rename = "ProcessType")]
300 pub process_type: AttrV<ActivationProcessType>,
301 #[serde(rename = "SenderIdentification")]
303 pub sender_identification: AttrVWithScheme<MarketParticipantId>,
304 #[serde(rename = "SenderRole")]
306 pub sender_role: AttrV<MarketRoleType>,
307 #[serde(rename = "ReceiverIdentification")]
309 pub receiver_identification: AttrVWithScheme<MarketParticipantId>,
310 #[serde(rename = "ReceiverRole")]
312 pub receiver_role: AttrV<MarketRoleType>,
313 #[serde(rename = "CreationDateTime")]
315 pub creation_date_time: AttrV<UtcDateTime>,
316 #[serde(rename = "ActivationTimeInterval")]
318 pub activation_time_interval: AttrV<TimeInterval>,
319 #[serde(
321 rename = "OrderIdentification",
322 default,
323 skip_serializing_if = "Option::is_none"
324 )]
325 pub order_identification: Option<AttrV<DocumentId>>,
326 #[serde(
328 rename = "OrderIdentificationVersion",
329 default,
330 skip_serializing_if = "Option::is_none"
331 )]
332 pub order_identification_version: Option<AttrV<DocumentVersion>>,
333 #[serde(
336 rename = "ScheduleTimeSeries",
337 default,
338 skip_serializing_if = "Vec::is_empty"
339 )]
340 pub schedule_time_series: Vec<ScheduleTimeSeries>,
341 #[serde(rename = "ActivationTimeSeries", default)]
343 pub time_series: Vec<ActivationTimeSeries>,
344 #[serde(rename = "Reason", default, skip_serializing_if = "Option::is_none")]
346 pub reason: Option<DocumentReason>,
347}