use serde::{Deserialize, Serialize};
use crate::types::{Decimal3, DocumentId, MarketParticipantId, Mrid, UtcDateTime};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Codierung {
#[serde(rename = "A10")]
Gs1,
#[serde(rename = "NDE")]
Nde,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct StammdatenParticipantRef {
#[serde(rename = "@Code")]
pub code: MarketParticipantId,
#[serde(rename = "@Codierung")]
pub codierung: Codierung,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StammdatenDocType {
#[serde(rename = "Z02")]
Reduced,
#[serde(rename = "Z03")]
Enriched,
#[serde(rename = "Z04")]
NbAggregate,
#[serde(rename = "Z14")]
Bilanzkreis,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StammdatenSenderRole {
#[serde(rename = "A18")]
GridOperator,
#[serde(rename = "A27")]
ResourceProvider,
#[serde(rename = "A39")]
DataProvider,
#[serde(rename = "Z01")]
Supplier,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StammdatenReceiverRole {
#[serde(rename = "A08")]
BalanceResponsibleParty,
#[serde(rename = "A18")]
GridOperator,
#[serde(rename = "A39")]
DataProvider,
#[serde(rename = "Z01")]
Supplier,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Meldungsstatus {
#[serde(rename = "A14")]
Creation,
#[serde(rename = "A15")]
Update,
#[serde(rename = "A16")]
Deactivation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Regelzone {
#[serde(rename = "10YDE-ENBW-----N")]
TransnetBw,
#[serde(rename = "10YDE-EON------1")]
TennetDe,
#[serde(rename = "10YDE-RWENET---I")]
Amprion,
#[serde(rename = "10YDE-VE-------2")]
FiftyHertz,
#[serde(rename = "10YFLENSBURG---3")]
Flensburg,
#[serde(rename = "11YRBAHNSTROM--P")]
Bahnstrom,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Energietraeger {
#[serde(rename = "B01")]
NaturalGas,
#[serde(rename = "B02")]
LigniteCoal,
#[serde(rename = "B03")]
HardCoal,
#[serde(rename = "B04")]
Oil,
#[serde(rename = "B05")]
Uranium,
#[serde(rename = "B06")]
Biomass,
#[serde(rename = "B07")]
Wind,
#[serde(rename = "B08")]
Solar,
#[serde(rename = "B09")]
RunOfRiver,
#[serde(rename = "B10")]
PumpedStorage,
#[serde(rename = "B11")]
Geothermal,
#[serde(rename = "B12")]
WasteToEnergy,
#[serde(rename = "B13")]
OtherRenewable,
#[serde(rename = "B14")]
Mixed,
#[serde(rename = "B15")]
PumpedStorageWithNaturalInflow,
#[serde(rename = "B16")]
OtherNonRenewable,
#[serde(rename = "B17")]
OtherStorage,
#[serde(rename = "B18")]
Hydrogen,
#[serde(rename = "B19")]
Offshore,
#[serde(rename = "B20")]
Battery,
#[serde(rename = "Z01")]
Eeg,
#[serde(rename = "Z02")]
Kwkg,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Bilanzierungsmodell {
#[serde(rename = "Z01")]
Planwert,
#[serde(rename = "Z02")]
Prognose,
#[serde(rename = "Z03")]
PrognoseWithPlanningData,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum AbrufartAufforderungsfall {
#[serde(rename = "Z01")]
Delta,
#[serde(rename = "Z02")]
Sollwert,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StatusDuldungsfall {
#[serde(rename = "A01")]
Yes,
#[serde(rename = "A02")]
No,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Verguetungsart {
#[serde(rename = "Z01")]
Eeg,
#[serde(rename = "Z02")]
Kwkg,
#[serde(rename = "Z03")]
Other,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct NbRef {
#[serde(rename = "@Code")]
pub code: MarketParticipantId,
#[serde(rename = "@Codierung")]
pub codierung: Codierung,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BetroffenerNb {
#[serde(rename = "@Code")]
pub code: MarketParticipantId,
#[serde(rename = "@Codierung")]
pub codierung: Codierung,
#[serde(rename = "@Pos")]
pub pos: u8,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum SteuerbarkeitEinheit {
#[serde(rename = "MAW")]
Megawatt,
#[serde(rename = "P1")]
Percent,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Stufen {
#[serde(rename = "Einzelstufe", default)]
pub einzelstufen: Vec<Decimal3>,
#[serde(rename = "@Einheit", default, skip_serializing_if = "Option::is_none")]
pub einheit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Schritte {
#[serde(rename = "Einheit")]
pub einheit: SteuerbarkeitEinheit,
#[serde(rename = "Schrittweite")]
pub schrittweite: Decimal3,
#[serde(rename = "Min")]
pub min: Decimal3,
#[serde(rename = "Max")]
pub max: Decimal3,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Steuerbarkeit {
#[serde(rename = "Stufen", default, skip_serializing_if = "Option::is_none")]
pub stufen: Option<Stufen>,
#[serde(rename = "Schritte", default, skip_serializing_if = "Option::is_none")]
pub schritte: Option<Schritte>,
#[serde(
rename = "@Fixierung",
default,
skip_serializing_if = "Option::is_none"
)]
pub fixierung: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TechnischeParameter {
#[serde(
rename = "Fahrbare_Mindesterzeugungsleistung",
default,
skip_serializing_if = "Option::is_none"
)]
pub fahrbare_mindesterzeugungsleistung: Option<Decimal3>,
#[serde(
rename = "Mindestbetriebszeit",
default,
skip_serializing_if = "Option::is_none"
)]
pub mindestbetriebszeit: Option<u32>,
#[serde(
rename = "Mindeststillstandszeit",
default,
skip_serializing_if = "Option::is_none"
)]
pub mindeststillstandszeit: Option<u32>,
#[serde(
rename = "Anfahrzeit_kalt",
default,
skip_serializing_if = "Option::is_none"
)]
pub anfahrzeit_kalt: Option<u32>,
#[serde(
rename = "Anfahrzeit_warm",
default,
skip_serializing_if = "Option::is_none"
)]
pub anfahrzeit_warm: Option<u32>,
#[serde(
rename = "Hochfahrzeit_kalt",
default,
skip_serializing_if = "Option::is_none"
)]
pub hochfahrzeit_kalt: Option<u32>,
#[serde(
rename = "Hochfahrzeit_warm",
default,
skip_serializing_if = "Option::is_none"
)]
pub hochfahrzeit_warm: Option<u32>,
#[serde(
rename = "Abfahrzeit",
default,
skip_serializing_if = "Option::is_none"
)]
pub abfahrzeit: Option<u32>,
#[serde(
rename = "Lastgradient_Erhoehung",
default,
skip_serializing_if = "Option::is_none"
)]
pub lastgradient_erhoehung: Option<Decimal3>,
#[serde(
rename = "Lastgradient_Reduzierung",
default,
skip_serializing_if = "Option::is_none"
)]
pub lastgradient_reduzierung: Option<Decimal3>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EnthaltenesTr {
#[serde(rename = "MaStR_Nr", default, skip_serializing_if = "Option::is_none")]
pub ma_str_nr: Option<String>,
#[serde(rename = "Klarname", default, skip_serializing_if = "Option::is_none")]
pub klarname: Option<String>,
#[serde(rename = "Typ", default, skip_serializing_if = "Option::is_none")]
pub typ: Option<String>,
#[serde(
rename = "Code_Kraftwerk",
default,
skip_serializing_if = "Option::is_none"
)]
pub code_kraftwerk: Option<String>,
#[serde(
rename = "Marktlokation",
default,
skip_serializing_if = "Option::is_none"
)]
pub marktlokation: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SrObjekt {
#[serde(rename = "Klarname", default, skip_serializing_if = "Option::is_none")]
pub klarname: Option<String>,
#[serde(rename = "Anschluss_Netzbetreiber")]
pub anschluss_netzbetreiber: NbRef,
#[serde(
rename = "Anweisender_Netzbetreiber",
default,
skip_serializing_if = "Option::is_none"
)]
pub anweisender_netzbetreiber: Option<NbRef>,
#[serde(
rename = "Betroffene_Netzbetreiber",
default,
skip_serializing_if = "Vec::is_empty"
)]
pub betroffene_netzbetreiber: Vec<BetroffenerNb>,
#[serde(
rename = "Weitere_betroffene_Netzbetreiber",
default,
skip_serializing_if = "Vec::is_empty"
)]
pub weitere_betroffene_netzbetreiber: Vec<NbRef>,
#[serde(
rename = "Energietraeger",
default,
skip_serializing_if = "Option::is_none"
)]
pub energietraeger: Option<Energietraeger>,
#[serde(
rename = "Verguetungsart",
default,
skip_serializing_if = "Option::is_none"
)]
pub verguetungsart: Option<Verguetungsart>,
#[serde(
rename = "Status_Duldungsfall",
default,
skip_serializing_if = "Option::is_none"
)]
pub status_duldungsfall: Option<StatusDuldungsfall>,
#[serde(
rename = "Steuerbarkeit",
default,
skip_serializing_if = "Option::is_none"
)]
pub steuerbarkeit: Option<Steuerbarkeit>,
#[serde(
rename = "Abrufart_Aufforderungsfall",
default,
skip_serializing_if = "Option::is_none"
)]
pub abrufart_aufforderungsfall: Option<AbrufartAufforderungsfall>,
#[serde(rename = "Bilanzierungsmodell")]
pub bilanzierungsmodell: Bilanzierungsmodell,
#[serde(
rename = "Individuelle_Quote",
default,
skip_serializing_if = "Option::is_none"
)]
pub individuelle_quote: Option<IndividuelleQuote>,
#[serde(rename = "Regelzone")]
pub regelzone: Regelzone,
#[serde(
rename = "Technische_Parameter",
default,
skip_serializing_if = "Option::is_none"
)]
pub technische_parameter: Option<TechnischeParameter>,
#[serde(
rename = "Enthaltene_TR",
default,
skip_serializing_if = "Vec::is_empty"
)]
pub enthaltene_tr: Vec<EnthaltenesTr>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IndividuelleQuote {
#[serde(rename = "Quote", default)]
pub quoten: Vec<Decimal3>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename = "Stammdaten")]
pub struct Stammdaten {
#[serde(rename = "DocumentIdentification")]
pub document_identification: DocumentId,
#[serde(rename = "DocumentType")]
pub document_type: StammdatenDocType,
#[serde(rename = "Erstellungszeitpunkt")]
pub erstellungszeitpunkt: UtcDateTime,
#[serde(rename = "Sender")]
pub sender: StammdatenParticipantRef,
#[serde(rename = "Senderrolle")]
pub senderrolle: StammdatenSenderRole,
#[serde(rename = "Empfaenger")]
pub empfaenger: StammdatenParticipantRef,
#[serde(rename = "Empfaengerrolle")]
pub empfaengerrolle: StammdatenReceiverRole,
#[serde(
rename = "RefDokumentID",
default,
skip_serializing_if = "Option::is_none"
)]
pub ref_dokument_id: Option<Mrid>,
#[serde(
rename = "OriginalSender",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_sender: Option<StammdatenParticipantRef>,
#[serde(
rename = "OriginalDokumentID",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_dokument_id: Option<Mrid>,
#[serde(
rename = "OriginalErstellungszeitpunkt",
default,
skip_serializing_if = "Option::is_none"
)]
pub original_erstellungszeitpunkt: Option<UtcDateTime>,
#[serde(rename = "Gueltig_ab")]
pub gueltig_ab: UtcDateTime,
#[serde(rename = "Meldungsstatus")]
pub meldungsstatus: Meldungsstatus,
#[serde(rename = "SR_Objekt", default)]
pub sr_objekte: Vec<SrObjekt>,
}