1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
10#[cfg_attr(feature = "json-schema", schemars(rename = "Themengebiet"))]
11#[non_exhaustive]
12pub enum SubjectArea {
13 #[serde(rename = "ALLGEMEINER_INFORMATIONSAUSTAUSCH")]
15 GeneralInformationExchange,
16
17 #[serde(rename = "AN_UND_ABMELDUNG")]
19 RegistrationDeregistration,
20
21 #[serde(rename = "ANSPRECHPARTNER_ALLGEMEIN")]
23 GeneralContact,
24
25 #[serde(rename = "ANSPRECHPARTNER_BDEW_DVGW")]
27 BdewDvgwContact,
28
29 #[serde(rename = "ANSPRECHPARTNER_IT_TECHNIK")]
31 ItTechContact,
32
33 #[serde(rename = "BILANZIERUNG")]
35 Balancing,
36
37 #[serde(rename = "BILANZKREISKOORDINATOR")]
39 BalancingAreaCoordinator,
40
41 #[serde(rename = "BILANZKREISVERANTWORTLICHER")]
43 BalancingAreaResponsible,
44
45 #[serde(rename = "DATENFORMATE_ZERTIFIKATE_VERSCHLUESSELUNGEN")]
47 DataFormatsCertificatesEncryption,
48
49 #[serde(rename = "DEBITORENMANAGEMENT")]
51 DebtorManagement,
52
53 #[serde(rename = "DEMAND_SIDE_MANAGEMENT")]
55 DemandSideManagement,
56
57 #[serde(rename = "EDI_VEREINBARUNG")]
59 EdiAgreement,
60
61 #[serde(rename = "EDIFACT")]
63 Edifact,
64
65 #[serde(rename = "ENERGIEDATENMANAGEMENT")]
67 EnergyDataManagement,
68
69 #[serde(rename = "FAHRPLANMANAGEMENT")]
71 ScheduleManagement,
72
73 #[serde(rename = "ALOCAT")]
75 Alocat,
76
77 #[serde(rename = "APERAK")]
79 Aperak,
80
81 #[serde(rename = "CONTRL")]
83 Contrl,
84
85 #[serde(rename = "INVOIC")]
87 Invoic,
88
89 #[serde(rename = "MSCONS")]
91 Mscons,
92
93 #[serde(rename = "ORDERS")]
95 Orders,
96
97 #[serde(rename = "ORDERSP")]
99 Ordersp,
100
101 #[serde(rename = "REMADV")]
103 Remadv,
104
105 #[serde(rename = "UTILMD")]
107 Utilmd,
108
109 #[serde(rename = "GABI")]
111 GabiGas,
112
113 #[serde(rename = "GELI")]
115 GeliGas,
116
117 #[serde(rename = "GERAETERUECKGABE")]
119 DeviceReturn,
120
121 #[serde(rename = "GERAETEWECHSEL")]
123 DeviceChange,
124
125 #[serde(rename = "GPKE")]
127 Gpke,
128
129 #[serde(rename = "INBETRIEBNAHME")]
131 Commissioning,
132
133 #[serde(rename = "KAPAZITAETSMANAGEMENT")]
135 CapacityManagement,
136
137 #[serde(rename = "KLAERFAELLE")]
139 ClarificationCases,
140
141 #[serde(rename = "LASTGAENGE_RLM")]
143 LoadProfilesRlm,
144
145 #[serde(rename = "LIEFERANTENRAHMENVERTRAG")]
147 SupplierFrameworkContract,
148
149 #[serde(rename = "LIEFERANTENWECHSEL")]
151 SupplierSwitch,
152
153 #[serde(rename = "MABIS")]
155 Mabis,
156
157 #[serde(rename = "MAHNWESEN")]
159 Dunning,
160
161 #[serde(rename = "MARKTGEBIETSVERANTWORTLICHER")]
163 MarketAreaResponsible,
164
165 #[serde(rename = "MARKTKOMMUNIKATION")]
167 MarketCommunication,
168
169 #[serde(rename = "MEHR_MINDERMENGEN")]
171 MoreLessQuantities,
172
173 #[serde(rename = "MSB_MDL")]
175 MsbMdl,
176
177 #[serde(rename = "NETZABRECHNUNG")]
179 NetworkBilling,
180
181 #[serde(rename = "NETZENTGELTE")]
183 NetworkCharges,
184
185 #[serde(rename = "NETZMANAGEMENT")]
187 NetworkManagement,
188
189 #[serde(rename = "RECHT")]
191 Legal,
192
193 #[serde(rename = "REGULIERUNGSMANAGEMENT")]
195 RegulatoryManagement,
196
197 #[serde(rename = "REKLAMATIONEN")]
199 Complaints,
200
201 #[serde(rename = "SPERREN_ENTSPERREN_INKASSO")]
203 BlockingUnblockingCollection,
204
205 #[serde(rename = "STAMMDATEN")]
207 MasterData,
208
209 #[serde(rename = "STOERUNGSFAELLE")]
211 FaultCases,
212
213 #[serde(rename = "TECHNISCHE_FRAGEN")]
215 TechnicalQuestions,
216
217 #[serde(rename = "UMSTELLUNG_INVOIC")]
219 InvoicConversion,
220
221 #[serde(rename = "VERSCHLUESSELUNG_SIGNATUR")]
223 EncryptionSignature,
224
225 #[serde(rename = "VERTRAGSMANAGEMENT")]
227 ContractManagement,
228
229 #[serde(rename = "VERTRIEB")]
231 Sales,
232
233 #[serde(rename = "WIM")]
235 Wim,
236
237 #[serde(rename = "ZAEHLERSTAENDE_SLP")]
239 MeterReadingsSlp,
240
241 #[serde(rename = "ZAHLUNGSVERKEHR")]
243 PaymentTransactions,
244
245 #[serde(rename = "ZUORDNUNGSVEREINBARUNG")]
247 AssignmentAgreement,
248
249 #[serde(rename = "EINSPEISUNG")]
251 FeedIn,
252
253 #[serde(rename = "BEWEGUNGSDATEN")]
255 TransactionData,
256}
257
258impl SubjectArea {
259 pub fn german_name(&self) -> &'static str {
261 match self {
262 Self::GeneralInformationExchange => "Allgemeiner Informationsaustausch",
263 Self::RegistrationDeregistration => "An- und Abmeldung",
264 Self::GeneralContact => "Ansprechpartner Allgemein",
265 Self::BdewDvgwContact => "Ansprechpartner BDEW/DVGW",
266 Self::ItTechContact => "Ansprechpartner IT/Technik",
267 Self::Balancing => "Bilanzierung",
268 Self::BalancingAreaCoordinator => "Bilanzkreiskoordinator",
269 Self::BalancingAreaResponsible => "Bilanzkreisverantwortlicher",
270 Self::DataFormatsCertificatesEncryption => {
271 "Datenformate, Zertifikate, Verschlüsselungen"
272 }
273 Self::DebtorManagement => "Debitorenmanagement",
274 Self::DemandSideManagement => "Demand-Side-Management",
275 Self::EdiAgreement => "EDI-Vereinbarung",
276 Self::Edifact => "EDIFACT",
277 Self::EnergyDataManagement => "Energiedatenmanagement",
278 Self::ScheduleManagement => "Fahrplanmanagement",
279 Self::Alocat => "Format:ALOCAT",
280 Self::Aperak => "Format:APERAK",
281 Self::Contrl => "Format:CONTRL",
282 Self::Invoic => "Format:INVOIC",
283 Self::Mscons => "Format:MSCONS",
284 Self::Orders => "Format:ORDERS",
285 Self::Ordersp => "Format:ORDERSP",
286 Self::Remadv => "Format:REMADV",
287 Self::Utilmd => "Format:UTILMD",
288 Self::GabiGas => "GaBi Gas",
289 Self::GeliGas => "GeLi Gas",
290 Self::DeviceReturn => "Geräterückgabe",
291 Self::DeviceChange => "Gerätewechsel",
292 Self::Gpke => "GPKE",
293 Self::Commissioning => "Inbetriebnahme",
294 Self::CapacityManagement => "Kapazitätsmanagement",
295 Self::ClarificationCases => "Klärfälle",
296 Self::LoadProfilesRlm => "Lastgänge RLM",
297 Self::SupplierFrameworkContract => "Lieferantenrahmenvertrag",
298 Self::SupplierSwitch => "Lieferantenwechsel",
299 Self::Mabis => "MaBiS",
300 Self::Dunning => "Mahnwesen",
301 Self::MarketAreaResponsible => "Marktgebietsverantwortlicher",
302 Self::MarketCommunication => "Marktkommunikation",
303 Self::MoreLessQuantities => "Mehr-/Mindermengen",
304 Self::MsbMdl => "MSB - MDL",
305 Self::NetworkBilling => "Netzabrechnung",
306 Self::NetworkCharges => "Netzentgelte",
307 Self::NetworkManagement => "Netzmanagement",
308 Self::Legal => "Recht",
309 Self::RegulatoryManagement => "Regulierungsmanagement",
310 Self::Complaints => "Reklamationen",
311 Self::BlockingUnblockingCollection => "Sperren/Entsperren/Inkasso",
312 Self::MasterData => "Stammdaten",
313 Self::FaultCases => "Störungsfälle",
314 Self::TechnicalQuestions => "Technische Fragen",
315 Self::InvoicConversion => "Umstellung INVOIC",
316 Self::EncryptionSignature => "Verschlüsselung/Signatur",
317 Self::ContractManagement => "Vertragsmanagement",
318 Self::Sales => "Vertrieb",
319 Self::Wim => "WiM",
320 Self::MeterReadingsSlp => "Zählerstände SLP",
321 Self::PaymentTransactions => "Zahlungsverkehr",
322 Self::AssignmentAgreement => "Zuordnungsvereinbarung",
323 Self::FeedIn => "Einspeisung",
324 Self::TransactionData => "Bewegungsdaten",
325 }
326 }
327}
328
329#[cfg(test)]
330mod tests {
331 use super::*;
332
333 #[test]
334 fn test_serialize() {
335 assert_eq!(
336 serde_json::to_string(&SubjectArea::Balancing).unwrap(),
337 r#""BILANZIERUNG""#
338 );
339 assert_eq!(
340 serde_json::to_string(&SubjectArea::MasterData).unwrap(),
341 r#""STAMMDATEN""#
342 );
343 }
344
345 #[test]
346 fn test_deserialize() {
347 assert_eq!(
348 serde_json::from_str::<SubjectArea>(r#""MARKTKOMMUNIKATION""#).unwrap(),
349 SubjectArea::MarketCommunication
350 );
351 assert_eq!(
352 serde_json::from_str::<SubjectArea>(r#""VERTRIEB""#).unwrap(),
353 SubjectArea::Sales
354 );
355 }
356
357 #[test]
358 fn test_roundtrip() {
359 for area in [
360 SubjectArea::GeneralInformationExchange,
361 SubjectArea::Balancing,
362 SubjectArea::MarketCommunication,
363 SubjectArea::MasterData,
364 SubjectArea::Sales,
365 ] {
366 let json = serde_json::to_string(&area).unwrap();
367 let parsed: SubjectArea = serde_json::from_str(&json).unwrap();
368 assert_eq!(area, parsed);
369 }
370 }
371}