redispatch_xml/documents/
network_constraint.rs1use serde::{Deserialize, Serialize};
2
3use crate::documents::activation::{ControlZoneRef, ResourceObjectRef};
4use crate::documents::planned_resource_schedule::GridElementCodingScheme;
5use crate::types::{
6 AttrV, AttrVWithScheme, Direction, DocumentId, DocumentVersion, MarketParticipantId,
7 MarketRoleType, MeasureUnit, Period, TimeInterval, UtcDateTime,
8};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
14pub enum NcdDocType {
15 #[serde(rename = "B15")]
17 NetworkConstraint,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
22pub enum NcdProcessType {
23 #[serde(rename = "A14")]
25 Forecast,
26}
27
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
30pub enum NcdBusinessType {
31 #[serde(rename = "A77")]
33 ProductionDispatchable,
34 #[serde(rename = "B59")]
36 NetworkElement,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
41pub enum NcdStatus {
42 #[serde(rename = "A07")]
44 Activated,
45 #[serde(rename = "A36")]
47 Planned,
48 #[serde(rename = "Z06")]
50 Demand,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
55pub struct NcdDocStatus {
56 #[serde(rename = "@v")]
58 pub v: String,
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
65pub struct NetworkConstraintTimeSeries {
66 #[serde(rename = "TimeSeriesIdentification")]
68 pub time_series_identification: AttrV<DocumentId>,
69 #[serde(rename = "BusinessType")]
71 pub business_type: AttrV<NcdBusinessType>,
72 #[serde(rename = "Direction")]
74 pub direction: AttrV<Direction>,
75 #[serde(rename = "ConnectingArea")]
77 pub connecting_area: ControlZoneRef,
78 #[serde(rename = "ResourceObject")]
80 pub resource_object: ResourceObjectRef,
81 #[serde(rename = "GridElement")]
83 pub grid_element: AttrVWithScheme<String, GridElementCodingScheme>,
84 #[serde(rename = "MeasurementUnit")]
86 pub measurement_unit: AttrV<MeasureUnit>,
87 #[serde(rename = "Status", default, skip_serializing_if = "Option::is_none")]
89 pub status: Option<AttrV<NcdStatus>>,
90 #[serde(rename = "Period")]
92 pub period: Period,
93}
94
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
103#[serde(rename = "NetworkConstraintDocument")]
104pub struct NetworkConstraintDocument {
105 #[serde(rename = "DocumentIdentification")]
107 pub document_identification: AttrV<DocumentId>,
108 #[serde(rename = "DocumentVersion")]
110 pub document_version: AttrV<DocumentVersion>,
111 #[serde(rename = "DocumentType")]
113 pub document_type: AttrV<NcdDocType>,
114 #[serde(rename = "ProcessType")]
116 pub process_type: AttrV<NcdProcessType>,
117 #[serde(rename = "SenderIdentification")]
119 pub sender_identification: AttrVWithScheme<MarketParticipantId>,
120 #[serde(rename = "SenderRole")]
122 pub sender_role: AttrV<MarketRoleType>,
123 #[serde(rename = "ReceiverIdentification")]
125 pub receiver_identification: AttrVWithScheme<MarketParticipantId>,
126 #[serde(rename = "ReceiverRole")]
128 pub receiver_role: AttrV<MarketRoleType>,
129 #[serde(rename = "DocumentDateTime")]
131 pub document_date_time: AttrV<UtcDateTime>,
132 #[serde(rename = "TimePeriodCovered")]
134 pub time_period_covered: AttrV<TimeInterval>,
135 #[serde(rename = "DocStatus", default, skip_serializing_if = "Option::is_none")]
137 pub doc_status: Option<NcdDocStatus>,
138 #[serde(
140 rename = "NetworkConstraintTimeSeries",
141 default,
142 skip_serializing_if = "Vec::is_empty"
143 )]
144 pub time_series: Vec<NetworkConstraintTimeSeries>,
145}