redispatch_xml/documents/
network_constraint.rs1use serde::{Deserialize, Serialize};
3
4use crate::documents::activation::{ControlZoneRef, ResourceObjectRef};
5use crate::documents::planned_resource_schedule::GridElementCodingScheme;
6use crate::types::{
7 AttrV, AttrVWithScheme, Direction, DocumentId, DocumentVersion, MarketParticipantId,
8 MarketRoleType, MeasureUnit, Period, TimeInterval, UtcDateTime,
9};
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
15pub enum NcdDocType {
16 #[serde(rename = "B15")]
18 NetworkConstraint,
19}
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
23pub enum NcdProcessType {
24 #[serde(rename = "A14")]
26 Forecast,
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
31pub enum NcdBusinessType {
32 #[serde(rename = "A77")]
34 ProductionDispatchable,
35 #[serde(rename = "B59")]
37 NetworkElement,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
42pub enum NcdStatus {
43 #[serde(rename = "A07")]
45 Activated,
46 #[serde(rename = "A36")]
48 Planned,
49 #[serde(rename = "Z06")]
51 Demand,
52}
53
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
56pub struct NcdDocStatus {
57 #[serde(rename = "@v")]
59 pub v: String,
60}
61
62#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
66pub struct NetworkConstraintTimeSeries {
67 #[serde(rename = "TimeSeriesIdentification")]
69 pub time_series_identification: AttrV<DocumentId>,
70 #[serde(rename = "BusinessType")]
72 pub business_type: AttrV<NcdBusinessType>,
73 #[serde(rename = "Direction")]
75 pub direction: AttrV<Direction>,
76 #[serde(rename = "ConnectingArea")]
78 pub connecting_area: ControlZoneRef,
79 #[serde(rename = "ResourceObject")]
81 pub resource_object: ResourceObjectRef,
82 #[serde(rename = "GridElement")]
84 pub grid_element: AttrVWithScheme<String, GridElementCodingScheme>,
85 #[serde(rename = "MeasurementUnit")]
87 pub measurement_unit: AttrV<MeasureUnit>,
88 #[serde(rename = "Status", default, skip_serializing_if = "Option::is_none")]
90 pub status: Option<AttrV<NcdStatus>>,
91 #[serde(rename = "Period")]
93 pub period: Period,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
104#[serde(rename = "NetworkConstraintDocument")]
105pub struct NetworkConstraintDocument {
106 #[serde(rename = "DocumentIdentification")]
108 pub document_identification: AttrV<DocumentId>,
109 #[serde(rename = "DocumentVersion")]
111 pub document_version: AttrV<DocumentVersion>,
112 #[serde(rename = "DocumentType")]
114 pub document_type: AttrV<NcdDocType>,
115 #[serde(rename = "ProcessType")]
117 pub process_type: AttrV<NcdProcessType>,
118 #[serde(rename = "SenderIdentification")]
120 pub sender_identification: AttrVWithScheme<MarketParticipantId>,
121 #[serde(rename = "SenderRole")]
123 pub sender_role: AttrV<MarketRoleType>,
124 #[serde(rename = "ReceiverIdentification")]
126 pub receiver_identification: AttrVWithScheme<MarketParticipantId>,
127 #[serde(rename = "ReceiverRole")]
129 pub receiver_role: AttrV<MarketRoleType>,
130 #[serde(rename = "DocumentDateTime")]
132 pub document_date_time: AttrV<UtcDateTime>,
133 #[serde(rename = "TimePeriodCovered")]
135 pub time_period_covered: AttrV<TimeInterval>,
136 #[serde(rename = "DocStatus", default, skip_serializing_if = "Option::is_none")]
138 pub doc_status: Option<NcdDocStatus>,
139 #[serde(
141 rename = "NetworkConstraintTimeSeries",
142 default,
143 skip_serializing_if = "Vec::is_empty"
144 )]
145 pub time_series: Vec<NetworkConstraintTimeSeries>,
146}