1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum SubjectArea {
11 #[serde(rename = "ALLGEMEINER_INFORMATIONSAUSTAUSCH")]
13 GeneralInformationExchange,
14
15 #[serde(rename = "AN_UND_ABMELDUNG")]
17 RegistrationDeregistration,
18
19 #[serde(rename = "ANSPRECHPARTNER_ALLGEMEIN")]
21 GeneralContact,
22
23 #[serde(rename = "ANSPRECHPARTNER_BDEW_DVGW")]
25 BdewDvgwContact,
26
27 #[serde(rename = "ANSPRECHPARTNER_IT_TECHNIK")]
29 ItTechContact,
30
31 #[serde(rename = "BILANZIERUNG")]
33 Balancing,
34
35 #[serde(rename = "BILANZKREISKOORDINATOR")]
37 BalancingAreaCoordinator,
38
39 #[serde(rename = "BILANZKREISVERANTWORTLICHER")]
41 BalancingAreaResponsible,
42
43 #[serde(rename = "DATENFORMATE_ZERTIFIKATE_VERSCHLUESSELUNGEN")]
45 DataFormatsCertificatesEncryption,
46
47 #[serde(rename = "DEBITORENMANAGEMENT")]
49 DebtorManagement,
50
51 #[serde(rename = "DEMAND_SIDE_MANAGEMENT")]
53 DemandSideManagement,
54
55 #[serde(rename = "EDI_VEREINBARUNG")]
57 EdiAgreement,
58
59 #[serde(rename = "EDIFACT")]
61 Edifact,
62
63 #[serde(rename = "ENERGIEDATENMANAGEMENT")]
65 EnergyDataManagement,
66
67 #[serde(rename = "FAHRPLANMANAGEMENT")]
69 ScheduleManagement,
70
71 #[serde(rename = "ALOCAT")]
73 Alocat,
74
75 #[serde(rename = "APERAK")]
77 Aperak,
78
79 #[serde(rename = "CONTRL")]
81 Contrl,
82
83 #[serde(rename = "INVOIC")]
85 Invoic,
86
87 #[serde(rename = "MSCONS")]
89 Mscons,
90
91 #[serde(rename = "ORDERS")]
93 Orders,
94
95 #[serde(rename = "ORDERSP")]
97 Ordersp,
98
99 #[serde(rename = "REMADV")]
101 Remadv,
102
103 #[serde(rename = "UTILMD")]
105 Utilmd,
106
107 #[serde(rename = "GABI")]
109 GabiGas,
110
111 #[serde(rename = "GELI")]
113 GeliGas,
114
115 #[serde(rename = "GERAETERUECKGABE")]
117 DeviceReturn,
118
119 #[serde(rename = "GERAETEWECHSEL")]
121 DeviceChange,
122
123 #[serde(rename = "GPKE")]
125 Gpke,
126
127 #[serde(rename = "INBETRIEBNAHME")]
129 Commissioning,
130
131 #[serde(rename = "KAPAZITAETSMANAGEMENT")]
133 CapacityManagement,
134
135 #[serde(rename = "KLAERFAELLE")]
137 ClarificationCases,
138
139 #[serde(rename = "LASTGAENGE_RLM")]
141 LoadProfilesRlm,
142
143 #[serde(rename = "LIEFERANTENRAHMENVERTRAG")]
145 SupplierFrameworkContract,
146
147 #[serde(rename = "LIEFERANTENWECHSEL")]
149 SupplierSwitch,
150
151 #[serde(rename = "MABIS")]
153 Mabis,
154
155 #[serde(rename = "MAHNWESEN")]
157 Dunning,
158
159 #[serde(rename = "MARKTGEBIETSVERANTWORTLICHER")]
161 MarketAreaResponsible,
162
163 #[serde(rename = "MARKTKOMMUNIKATION")]
165 MarketCommunication,
166
167 #[serde(rename = "MEHR_MINDERMENGEN")]
169 MoreLessQuantities,
170
171 #[serde(rename = "MSB_MDL")]
173 MsbMdl,
174
175 #[serde(rename = "NETZABRECHNUNG")]
177 NetworkBilling,
178
179 #[serde(rename = "NETZENTGELTE")]
181 NetworkCharges,
182
183 #[serde(rename = "NETZMANAGEMENT")]
185 NetworkManagement,
186
187 #[serde(rename = "RECHT")]
189 Legal,
190
191 #[serde(rename = "REGULIERUNGSMANAGEMENT")]
193 RegulatoryManagement,
194
195 #[serde(rename = "REKLAMATIONEN")]
197 Complaints,
198
199 #[serde(rename = "SPERREN_ENTSPERREN_INKASSO")]
201 BlockingUnblockingCollection,
202
203 #[serde(rename = "STAMMDATEN")]
205 MasterData,
206
207 #[serde(rename = "STOERUNGSFAELLE")]
209 FaultCases,
210
211 #[serde(rename = "TECHNISCHE_FRAGEN")]
213 TechnicalQuestions,
214
215 #[serde(rename = "UMSTELLUNG_INVOIC")]
217 InvoicConversion,
218
219 #[serde(rename = "VERSCHLUESSELUNG_SIGNATUR")]
221 EncryptionSignature,
222
223 #[serde(rename = "VERTRAGSMANAGEMENT")]
225 ContractManagement,
226
227 #[serde(rename = "VERTRIEB")]
229 Sales,
230
231 #[serde(rename = "WIM")]
233 Wim,
234
235 #[serde(rename = "ZAEHLERSTAENDE_SLP")]
237 MeterReadingsSlp,
238
239 #[serde(rename = "ZAHLUNGSVERKEHR")]
241 PaymentTransactions,
242
243 #[serde(rename = "ZUORDNUNGSVEREINBARUNG")]
245 AssignmentAgreement,
246
247 #[serde(rename = "EINSPEISUNG")]
249 FeedIn,
250
251 #[serde(rename = "BEWEGUNGSDATEN")]
253 TransactionData,
254}
255
256impl SubjectArea {
257 pub fn german_name(&self) -> &'static str {
259 match self {
260 Self::GeneralInformationExchange => "Allgemeiner Informationsaustausch",
261 Self::RegistrationDeregistration => "An- und Abmeldung",
262 Self::GeneralContact => "Ansprechpartner Allgemein",
263 Self::BdewDvgwContact => "Ansprechpartner BDEW/DVGW",
264 Self::ItTechContact => "Ansprechpartner IT/Technik",
265 Self::Balancing => "Bilanzierung",
266 Self::BalancingAreaCoordinator => "Bilanzkreiskoordinator",
267 Self::BalancingAreaResponsible => "Bilanzkreisverantwortlicher",
268 Self::DataFormatsCertificatesEncryption => {
269 "Datenformate, Zertifikate, Verschlüsselungen"
270 }
271 Self::DebtorManagement => "Debitorenmanagement",
272 Self::DemandSideManagement => "Demand-Side-Management",
273 Self::EdiAgreement => "EDI-Vereinbarung",
274 Self::Edifact => "EDIFACT",
275 Self::EnergyDataManagement => "Energiedatenmanagement",
276 Self::ScheduleManagement => "Fahrplanmanagement",
277 Self::Alocat => "Format:ALOCAT",
278 Self::Aperak => "Format:APERAK",
279 Self::Contrl => "Format:CONTRL",
280 Self::Invoic => "Format:INVOIC",
281 Self::Mscons => "Format:MSCONS",
282 Self::Orders => "Format:ORDERS",
283 Self::Ordersp => "Format:ORDERSP",
284 Self::Remadv => "Format:REMADV",
285 Self::Utilmd => "Format:UTILMD",
286 Self::GabiGas => "GaBi Gas",
287 Self::GeliGas => "GeLi Gas",
288 Self::DeviceReturn => "Geräterückgabe",
289 Self::DeviceChange => "Gerätewechsel",
290 Self::Gpke => "GPKE",
291 Self::Commissioning => "Inbetriebnahme",
292 Self::CapacityManagement => "Kapazitätsmanagement",
293 Self::ClarificationCases => "Klärfälle",
294 Self::LoadProfilesRlm => "Lastgänge RLM",
295 Self::SupplierFrameworkContract => "Lieferantenrahmenvertrag",
296 Self::SupplierSwitch => "Lieferantenwechsel",
297 Self::Mabis => "MaBiS",
298 Self::Dunning => "Mahnwesen",
299 Self::MarketAreaResponsible => "Marktgebietsverantwortlicher",
300 Self::MarketCommunication => "Marktkommunikation",
301 Self::MoreLessQuantities => "Mehr-/Mindermengen",
302 Self::MsbMdl => "MSB - MDL",
303 Self::NetworkBilling => "Netzabrechnung",
304 Self::NetworkCharges => "Netzentgelte",
305 Self::NetworkManagement => "Netzmanagement",
306 Self::Legal => "Recht",
307 Self::RegulatoryManagement => "Regulierungsmanagement",
308 Self::Complaints => "Reklamationen",
309 Self::BlockingUnblockingCollection => "Sperren/Entsperren/Inkasso",
310 Self::MasterData => "Stammdaten",
311 Self::FaultCases => "Störungsfälle",
312 Self::TechnicalQuestions => "Technische Fragen",
313 Self::InvoicConversion => "Umstellung INVOIC",
314 Self::EncryptionSignature => "Verschlüsselung/Signatur",
315 Self::ContractManagement => "Vertragsmanagement",
316 Self::Sales => "Vertrieb",
317 Self::Wim => "WiM",
318 Self::MeterReadingsSlp => "Zählerstände SLP",
319 Self::PaymentTransactions => "Zahlungsverkehr",
320 Self::AssignmentAgreement => "Zuordnungsvereinbarung",
321 Self::FeedIn => "Einspeisung",
322 Self::TransactionData => "Bewegungsdaten",
323 }
324 }
325}
326
327#[cfg(test)]
328mod tests {
329 use super::*;
330
331 #[test]
332 fn test_serialize() {
333 assert_eq!(
334 serde_json::to_string(&SubjectArea::Balancing).unwrap(),
335 r#""BILANZIERUNG""#
336 );
337 assert_eq!(
338 serde_json::to_string(&SubjectArea::MasterData).unwrap(),
339 r#""STAMMDATEN""#
340 );
341 }
342
343 #[test]
344 fn test_deserialize() {
345 assert_eq!(
346 serde_json::from_str::<SubjectArea>(r#""MARKTKOMMUNIKATION""#).unwrap(),
347 SubjectArea::MarketCommunication
348 );
349 assert_eq!(
350 serde_json::from_str::<SubjectArea>(r#""VERTRIEB""#).unwrap(),
351 SubjectArea::Sales
352 );
353 }
354
355 #[test]
356 fn test_roundtrip() {
357 for area in [
358 SubjectArea::GeneralInformationExchange,
359 SubjectArea::Balancing,
360 SubjectArea::MarketCommunication,
361 SubjectArea::MasterData,
362 SubjectArea::Sales,
363 ] {
364 let json = serde_json::to_string(&area).unwrap();
365 let parsed: SubjectArea = serde_json::from_str(&json).unwrap();
366 assert_eq!(area, parsed);
367 }
368 }
369}