// Auto-generated by automapper-generator. Do not edit.

#![allow(dead_code, unused_imports, non_camel_case_types)]

use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

/// kommunikationsart for PID 44130
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Kommunikationsart {
    /// Elektronische Post
    #[serde(rename = "EM")]
    ElektronischePost,
    /// Telefax
    #[serde(rename = "FX")]
    Telefax,
    /// Telefon
    #[serde(rename = "TE")]
    Telefon,
    /// weiteres Telefon
    #[serde(rename = "AJ")]
    WeiteresTelefon,
    /// Handy
    #[serde(rename = "AL")]
    Handy,
}

/// kontaktfunktion for PID 44130
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Kontaktfunktion {
    /// Informationskontakt
    #[serde(rename = "IC")]
    Informationskontakt,
}

/// marktrolle for PID 44130
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Marktrolle {
    /// Dokumenten-/Nachrichtenaussteller bzw. -absender
    #[serde(rename = "MS")]
    DokumentenNachrichtenausstellerAbsender,
    /// Nachrichtenempfänger
    #[serde(rename = "MR")]
    Nachrichtenempfaenger,
}

/// rollencodetyp for PID 44130
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Rollencodetyp {
    /// GS1
    #[serde(rename = "9")]
    Gs1,
    /// DE, DVGW Service & Consult GmbH
    #[serde(rename = "332")]
    DeDvgwServiceConsultGmbh,
}

/// pruefidentifikator for PID 44130
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Pruefidentifikator {
    /// GeLi Gas / Anmeldung NN
    #[serde(rename = "44001")]
    GeliGasAnmeldungNn,
    /// GeLi Gas / Bestätigung Anmeldung
    #[serde(rename = "44002")]
    GeliGasBestaetigungAnmeldung,
    /// GeLi Gas / Ablehnung Anmeldung
    #[serde(rename = "44003")]
    GeliGasAblehnungAnmeldung,
    /// GeLi Gas / Abmeldung NN
    #[serde(rename = "44004")]
    GeliGasAbmeldungNn,
    /// GeLi Gas / Bestätigung Abmeldung
    #[serde(rename = "44005")]
    GeliGasBestaetigungAbmeldung,
    /// GeLi Gas / Ablehnung Abmeldung
    #[serde(rename = "44006")]
    GeliGasAblehnungAbmeldung,
    /// GeLi Gas / Abmeldung NN vom NB
    #[serde(rename = "44007")]
    GeliGasAbmeldungNnNb,
    /// GeLi Gas / Bestätigung Abmeldung vom NB
    #[serde(rename = "44008")]
    GeliGasBestaetigungAbmeldungNb,
    /// GeLi Gas / Ablehnung Abmeldung vom NB
    #[serde(rename = "44009")]
    GeliGasAblehnungAbmeldungNb,
    /// GeLi Gas / Abmeldeanfrage des NB
    #[serde(rename = "44010")]
    GeliGasAbmeldeanfrageNb,
    /// GeLi Gas / Bestätigung Abmeldeanfrage
    #[serde(rename = "44011")]
    GeliGasBestaetigungAbmeldeanfrage,
    /// GeLi Gas / Ablehnung Abmeldeanfrage
    #[serde(rename = "44012")]
    GeliGasAblehnungAbmeldeanfrage,
    /// GeLi Gas / Anmeldung EoG
    #[serde(rename = "44013")]
    GeliGasAnmeldungEog,
    /// GeLi Gas / Bestätigung EoG Anmeldung
    #[serde(rename = "44014")]
    GeliGasBestaetigungEogAnmeldung,
    /// GeLi Gas / Ablehnung EoG Anmeldung
    #[serde(rename = "44015")]
    GeliGasAblehnungEogAnmeldung,
    /// GeLi Gas / Kündigung beim alten Lieferanten
    #[serde(rename = "44016")]
    GeliGasKuendigungBeimAltenLieferanten,
    /// GeLi Gas / Bestätigung Kündigung
    #[serde(rename = "44017")]
    GeliGasBestaetigungKuendigung,
    /// GeLi Gas / Ablehnung Kündigung
    #[serde(rename = "44018")]
    GeliGasAblehnungKuendigung,
    /// GeLi Gas / Bestandsliste zugeordnete Marktlokationen
    #[serde(rename = "44019")]
    GeliGasBestandslisteZugeordneteMarktlokationen,
    /// GeLi Gas / Änderungsmeldung zur Bestandsliste
    #[serde(rename = "44020")]
    GeliGasAenderungsmeldungBestandsliste,
    /// GeLi Gas / Antwort auf Änderungsmeldung zur Bestandsliste
    #[serde(rename = "44021")]
    GeliGasAntwortAenderungsmeldungBestandsliste,
    /// GeLi Gas / Anfrage nach Stornierung
    #[serde(rename = "44022")]
    GeliGasAnfrageStornierung,
    /// GeLi Gas / Bestätigung Anfrage Stornierung
    #[serde(rename = "44023")]
    GeliGasBestaetigungAnfrageStornierung,
    /// GeLi Gas / Ablehnung Anfrage Stornierung
    #[serde(rename = "44024")]
    GeliGasAblehnungAnfrageStornierung,
    /// GeLi Gas / Antwort auf die Geschäftsdatenanfrage
    #[serde(rename = "44035")]
    GeliGasAntwortGeschaeftsdatenanfrage,
    /// GeLi Gas / Informationsmeldung über existierende Zuordnung
    #[serde(rename = "44036")]
    GeliGasInformationsmeldungExistierendeZuordnung,
    /// GeLi Gas / Informationsmeldung zur Beendigung der Zuordnung
    #[serde(rename = "44037")]
    GeliGasInformationsmeldungBeendigungZuordnung,
    /// GeLi Gas / Informationsmeldung zur Aufhebung einer zuk. Zuordnung
    #[serde(rename = "44038")]
    GeliGasInformationsmeldungAufhebungZukZuordnung,
    /// WiM Gas / Kündigung MSB
    #[serde(rename = "44039")]
    WimGasKuendigungMsb,
    /// WiM Gas / Bestätigung Kündigung MSB
    #[serde(rename = "44040")]
    WimGasBestaetigungKuendigungMsb,
    /// WiM Gas / Ablehnung Kündigung MSB
    #[serde(rename = "44041")]
    WimGasAblehnungKuendigungMsb,
    /// WiM Gas / Anmeldung MSB
    #[serde(rename = "44042")]
    WimGasAnmeldungMsb,
    /// WiM Gas / Bestätigung Anmeldung MSB
    #[serde(rename = "44043")]
    WimGasBestaetigungAnmeldungMsb,
    /// WiM Gas / Ablehnung Anmeldung MSB
    #[serde(rename = "44044")]
    WimGasAblehnungAnmeldungMsb,
    /// WiM Gas / Ende MSB
    #[serde(rename = "44051")]
    WimGasEndeMsb,
    /// WiM Gas / Bestätigung Ende MSB
    #[serde(rename = "44052")]
    WimGasBestaetigungEndeMsb,
    /// WiM Gas / Ablehnung Ende MSB
    #[serde(rename = "44053")]
    WimGasAblehnungEndeMsb,
    /// WiM Gas / Antwort auf die MSB Geschäftsdatenanfrage
    #[serde(rename = "44060")]
    WimGasAntwortMsbGeschaeftsdatenanfrage,
    /// TSIMSG / Deklarationsliste an MGV
    #[serde(rename = "44096")]
    TsimsgDeklarationslisteMgv,
    /// TSIMSG / Deklarationsliste an BKV
    #[serde(rename = "44097")]
    TsimsgDeklarationslisteBkv,
    /// NBW Gas / Stammdaten zur Messlokation
    #[serde(rename = "44101")]
    NbwGasStammdatenMesslokation,
    /// NBW Gas / Aktualisierte Stammdaten zur Messlokation
    #[serde(rename = "44102")]
    NbwGasAktualisierteStammdatenMesslokation,
    /// NBW Gas / Stammdaten zur verbrauchenden Marktlokation
    #[serde(rename = "44103")]
    NbwGasStammdatenVerbrauchendenMarktlokation,
    /// NBW Gas / Aktualisierte Stammdaten zur verbrauchenden Marktlokation
    #[serde(rename = "44104")]
    NbwGasAktualisierteStammdatenVerbrauchendenMarktlokation,
    /// NBW Gas / Ablehnung auf Stammdaten zur verbrauchenden Marktlokation
    #[serde(rename = "44105")]
    NbwGasAblehnungStammdatenVerbrauchendenMarktlokation,
    /// SDÄ Gas / Nicht bila.rel. Änderung vom LF an NB
    #[serde(rename = "44109")]
    SdaeGasNichtBilaRelAenderungLfNb,
    /// SDÄ Gas / Antwort auf Änderung vom LF AG an AF
    #[serde(rename = "44111")]
    SdaeGasAntwortAenderungLfAgAf,
    /// SDÄ Gas / Nicht bila.rel. Änderung vom NB an LF
    #[serde(rename = "44112")]
    SdaeGasNichtBilaRelAenderungNbLf,
    /// SDÄ Gas / Nicht bila.rel. Änderung vom NB an MSB
    #[serde(rename = "44113")]
    SdaeGasNichtBilaRelAenderungNbMsb,
    /// SDÄ Gas / Antwort auf Änderung vom NB AG an NB
    #[serde(rename = "44115")]
    SdaeGasAntwortAenderungNbAgNb,
    /// SDÄ Gas / Änderung vom MSB an NB
    #[serde(rename = "44116")]
    SdaeGasAenderungMsbNb,
    /// SDÄ Gas / Änderung vom MSB NB an LF
    #[serde(rename = "44117")]
    SdaeGasAenderungMsbNbLf,
    /// SDÄ Gas / Antwort auf Änderung vom MSB AG an AF
    #[serde(rename = "44119")]
    SdaeGasAntwortAenderungMsbAgAf,
    /// SDÄ Gas / Bila.rel. Änderung vom LF an NB
    #[serde(rename = "44120")]
    SdaeGasBilaRelAenderungLfNb,
    /// SDÄ Gas / Antwort auf bila.rel. Änderung vom LF NB an LF
    #[serde(rename = "44121")]
    SdaeGasAntwortBilaRelAenderungLfNbLf,
    /// SDÄ Gas / Bila.rel. Änderung vom NB mit Abhängigkeiten NB an LF / MSB
    #[serde(rename = "44123")]
    SdaeGasBilaRelAenderungNbAbhaengigkeitenNbLfMsb,
    /// SDÄ Gas / Antwort auf bila.rel. Änderung vom NB mit Abhängigkeiten AG an NB
    #[serde(rename = "44124")]
    SdaeGasAntwortBilaRelAenderungNbAbhaengigkeitenAgNb,
    /// SDÄ Gas / Nicht bila.rel. Anfrage an LF NB [Berechtigt] an LF
    #[serde(rename = "44137")]
    SdaeGasNichtBilaRelAnfrageLfNbBerechtigtLf,
    /// SDÄ Gas / Antwort auf nicht bila.rel. Anfrage an LF LF an NB
    #[serde(rename = "44138")]
    SdaeGasAntwortNichtBilaRelAnfrageLfLfNb,
    /// SDÄ Gas / Nicht bila.rel. Anfrage an NB LF an NB
    #[serde(rename = "44139")]
    SdaeGasNichtBilaRelAnfrageNbLfNb,
    /// SDÄ Gas / Nicht bila.rel. Anfrage an NB MSB an NB
    #[serde(rename = "44140")]
    SdaeGasNichtBilaRelAnfrageNbMsbNb,
    /// SDÄ Gas / Antwort auf nicht bila.rel. Anfrage an NB NB an AF
    #[serde(rename = "44142")]
    SdaeGasAntwortNichtBilaRelAnfrageNbNbAf,
    /// SDÄ Gas / Anfrage an MSB mit Abhängigkeiten LF an NB
    #[serde(rename = "44143")]
    SdaeGasAnfrageMsbAbhaengigkeitenLfNb,
    /// SDÄ Gas / Antwort auf Anfrage an MSB mit Abhängigkeiten NB an AF
    #[serde(rename = "44145")]
    SdaeGasAntwortAnfrageMsbAbhaengigkeitenNbAf,
    /// SDÄ Gas / Ablehnung der Anfrage an MSB mit Abhängigkeiten NB an AF
    #[serde(rename = "44146")]
    SdaeGasAblehnungAnfrageMsbAbhaengigkeitenNbAf,
    /// SDÄ Gas / Anfrage an MSB mit Abhängigkeiten NB [Verteiler] an MSB
    #[serde(rename = "44147")]
    SdaeGasAnfrageMsbAbhaengigkeitenNbVerteilerMsb,
    /// SDÄ Gas / Anfrage an MSB mit Abhängigkeiten NB [Berechtigt] an MSB
    #[serde(rename = "44148")]
    SdaeGasAnfrageMsbAbhaengigkeitenNbBerechtigtMsb,
    /// SDÄ Gas / Antwort auf Anfrage an MSB mit Abhängigkeiten MSB an NB
    #[serde(rename = "44149")]
    SdaeGasAntwortAnfrageMsbAbhaengigkeitenMsbNb,
    /// SDÄ Gas / Bila.rel. Anfrage an LF NB an LF
    #[serde(rename = "44150")]
    SdaeGasBilaRelAnfrageLfNbLf,
    /// SDÄ Gas / Antwort auf bila.rel. Anfrage an LF LF an NB
    #[serde(rename = "44151")]
    SdaeGasAntwortBilaRelAnfrageLfLfNb,
    /// SDÄ Gas / Ablehnung der bila.rel. Anfrage an LF LF an NB
    #[serde(rename = "44152")]
    SdaeGasAblehnungBilaRelAnfrageLfLfNb,
    /// SDÄ Gas / Bila.rel. Anfrage an NB mit Abhängigkeiten
    #[serde(rename = "44156")]
    SdaeGasBilaRelAnfrageNbAbhaengigkeiten,
    /// SDÄ Gas / Antwort auf bila.rel. Anfrage an NB mit Abhängigkeiten
    #[serde(rename = "44157")]
    SdaeGasAntwortBilaRelAnfrageNbAbhaengigkeiten,
    /// SDÄ Gas / Änderung vom MSB ohne Abhängigkeiten MSB an NB
    #[serde(rename = "44159")]
    SdaeGasAenderungMsbOhneAbhaengigkeitenMsbNb,
    /// SDÄ Gas / Änderung vom MSB ohne Abhängigkeiten NB an LF / MSB
    #[serde(rename = "44160")]
    SdaeGasAenderungMsbOhneAbhaengigkeitenNbLfMsb,
    /// SDÄ Gas / Änderung vom MSB ohne Abhängigkeiten AG an AF
    #[serde(rename = "44161")]
    SdaeGasAenderungMsbOhneAbhaengigkeitenAgAf,
    /// SDÄ /Anfrage an MSB ohne Abhängigkeiten von LF / MSB an NB
    #[serde(rename = "44162")]
    SdaeAnfrageMsbOhneAbhaengigkeitenLfMsbNb,
    /// SDÄ Gas / Antwort auf Anfrage an MSB ohne Abhängigkeiten LF / MSB an NB
    #[serde(rename = "44163")]
    SdaeGasAntwortAnfrageMsbOhneAbhaengigkeitenLfMsbNb,
    /// SDÄ Gas / Ablehnung auf Anfrage an MSB ohne Abhängigkeiten LF / MSB an NB
    #[serde(rename = "44164")]
    SdaeGasAblehnungAnfrageMsbOhneAbhaengigkeitenLfMsbNb,
    /// SDÄ Gas /Anfrage an MSB ohne Abhängigkeiten NB [Verteiler] an MSB
    #[serde(rename = "44165")]
    SdaeGasAnfrageMsbOhneAbhaengigkeitenNbVerteilerMsb,
    /// SDÄ Gas /Anfrage an MSB ohne Abhängigkeiten NB [Berechtigter] an MSB
    #[serde(rename = "44166")]
    SdaeGasAnfrageMsbOhneAbhaengigkeitenNbBerechtigterMsb,
    /// SDÄ Gas / Antwort auf Anfrage an MSB ohne Abhängigkeiten MSB an NB
    #[serde(rename = "44167")]
    SdaeGasAntwortAnfrageMsbOhneAbhaengigkeitenMsbNb,
    /// WiM Gas / Verpflichtungsanfrage / Aufforderung
    #[serde(rename = "44168")]
    WimGasVerpflichtungsanfrageAufforderung,
    /// WiM Gas / Bestätigung Verpflichtungsanfrage
    #[serde(rename = "44169")]
    WimGasBestaetigungVerpflichtungsanfrage,
    /// WiM Gas / Ablehnung Verpflichtungsanfrage
    #[serde(rename = "44170")]
    WimGasAblehnungVerpflichtungsanfrage,
    /// SDÄ Gas / Anfrage an MSB mit Abhängigkeit MSB an NB
    #[serde(rename = "44172")]
    SdaeGasAnfrageMsbAbhaengigkeitMsbNb,
    /// SDÄ Gas / Änderung der Marktlokationsstruktur NB an LF
    #[serde(rename = "44175")]
    SdaeGasAenderungMarktlokationsstrukturNbLf,
    /// SDÄ Gas / Antwort auf Änderung der Marktlokationsstruktur LF an NB
    #[serde(rename = "44176")]
    SdaeGasAntwortAenderungMarktlokationsstrukturLfNb,
    /// SDÄ Gas / Anfrage der komplexen Marktlokationsstruktur LF an NB
    #[serde(rename = "44180")]
    SdaeGasAnfrageKomplexenMarktlokationsstrukturLfNb,
    /// SDÄ Gas / Antwort auf Anfrage der komplexen Marktlokationsstruktur NB an LF
    #[serde(rename = "44181")]
    SdaeGasAntwortAnfrageKomplexenMarktlokationsstrukturNbLf,
    /// SDÄ Gas / Ablehnung der Anfrage der komplexen Marktlokationsstruktur NB an LF
    #[serde(rename = "44182")]
    SdaeGasAblehnungAnfrageKomplexenMarktlokationsstrukturNbLf,
}

/// transaktionsgrund for PID 44130
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Transaktionsgrund {
    /// Kunde verlässt oder bezieht eine schon bestehende Marktlokation
    #[serde(rename = "E01")]
    KundeVerlaesstBestehendeMarktlokation,
    /// Kunde bezieht erstmals eine Marktlokation (z. B. Neubau)
    #[serde(rename = "E02")]
    KundeBeziehtErstmalsMarktlokationZBNeubau,
    /// - Kunde bleibt an der Marktlokation, hat nur den Marktpartner gewechselt
    #[serde(rename = "E03")]
    KundeBleibtMarktlokationMarktpartnerGewechseltMarktpartnerKunden,
    /// Dient dem Rückruf von abgegebenen Meldungen
    #[serde(rename = "E05")]
    DientRueckrufAbgegebenenMeldungen,
    /// Ersatzbelieferung
    #[serde(rename = "E06")]
    Ersatzbelieferung,
    /// Kündigung Lieferantenrahmenvertrag
    #[serde(rename = "Z02")]
    KuendigungLieferantenrahmenvertrag,
    /// Zusätzlicher Datensatz
    #[serde(rename = "Z15")]
    ZusaetzlicherDatensatz,
    /// Der NB informiert den LFN darüber, dass zum gewünschten Anmeldedatum noch ein...
    #[serde(rename = "Z26")]
    NbInformiertLfnDarueberDassGewuenschtenAnmeldedatumAndererLfa,
    /// Kunde zieht aus der Marktlokation aus und die Marktlokation wird stillgelegt ...
    #[serde(rename = "Z33")]
    KundeZiehtMarktlokationMarktlokationStillgelegtAllenAnderenAuszuegenE01,
    /// Beim NB liegt nur eine Auszugsmeldung für die Marktlokation vor. Es erfolgt s...
    #[serde(rename = "Z36")]
    BeimNbLiegtAuszugsmeldungMarktlokationVorEsErfolgtSeitensNb,
    /// Beim NB liegt eine neue Marktlokation ohne Lieferantenzuordnung vor. Daher er...
    #[serde(rename = "Z37")]
    BeimNbLiegtNeueMarktlokationOhneLieferantenzuordnungVorDaherErfolgt,
    /// Ein erstellter vorübergehender Anschluss wird aufgrund von fehlendem LF dem z...
    #[serde(rename = "Z39")]
    ErstellterVoruebergehenderAnschlussAufgrundFehlendemLfZustaendigenLfEog,
    /// Wird für den Prozess Geschäftsdatenanfrage benutzt.
    #[serde(rename = "Z40")]
    ProzessGeschaeftsdatenanfrageBenutzt,
    /// Verstreicht die gesetzliche 3 Monatsfrist der Ersatzversorgung ohne Aufnahme ...
    #[serde(rename = "Z41")]
    VerstreichtGesetzliche3MonatsfristErsatzversorgungOhneAufnahme,
    /// Wiederinbetriebnahme
    #[serde(rename = "Z69")]
    Wiederinbetriebnahme,
    /// EoG aus Bilanzkreisschließung
    #[serde(rename = "ZC6")]
    EogBilanzkreisschliessung,
    /// EoG aufgrund Erlöschen der Zuordnungsermächtigung
    #[serde(rename = "ZC7")]
    EogAufgrundErloeschenZuordnungsermaechtigung,
    /// Beendigung der Zuordnung
    #[serde(rename = "ZC8")]
    BeendigungZuordnung,
    /// Aufhebung einer zukünftigen Zuordnung wegen Auszug des Kunden
    #[serde(rename = "ZG9")]
    AufhebungZukuenftigenZuordnungWegenAuszugKunden,
    /// Aufhebung einer zukünftigen Zuordnung wegen Anmeldung eines anderen Lieferant...
    #[serde(rename = "ZH0")]
    AufhebungZukuenftigenZuordnungWegenAnmeldungAnderenLieferantenFrueheren,
    /// Aufhebung einer zukünftigen Zuordnung wegen Stilllegung
    #[serde(rename = "ZH1")]
    AufhebungZukuenftigenZuordnungWegenStilllegung,
    /// Vertrag zwischen Absender des Geschäftsvorfalls und Kunde wurde aufgehoben, w...
    #[serde(rename = "ZH2")]
    VertragAbsenderGeschaeftsvorfallsKundeWurdeAufgehobenZBVerwendetKunde,
    /// Es wird unverzüglich eine Korrektur der Zuordnungsliste vom LF an den NB vers...
    #[serde(rename = "ZD0")]
    EsUnverzueglichKorrekturZuordnungslisteLfNbVersendetAbweichendenInhalt,
    /// Der NB verzichtet bei Zuordnung der Marktlokation zum E/G auf die Namensprüfu...
    #[serde(rename = "ZD2")]
    NbVerzichtetZuordnungMarktlokationEGNamenspruefungSendetAbmeldeanfrageE,
    /// Stammdatenänderung
    #[serde(rename = "ZE3")]
    Stammdatenaenderung,
    /// Weggefallene Markt- bzw. Messlokation
    #[serde(rename = "ZE4")]
    WeggefalleneMarktMesslokation,
    /// Initialmeldung
    #[serde(rename = "ZE5")]
    Initialmeldung,
    /// Nicht bila.rel. Änderung vom LF
    #[serde(rename = "ZE6")]
    NichtBilaRelAenderungLf,
    /// Nicht bila.rel. Änderung vom NB
    #[serde(rename = "ZE7")]
    NichtBilaRelAenderungNb,
    /// Änderung vom MSB mit Abhängigkeiten
    #[serde(rename = "ZE8")]
    AenderungMsbAbhaengigkeiten,
    /// Bila.rel. Änderung vom LF
    #[serde(rename = "ZE9")]
    BilaRelAenderungLf,
    /// Bila.rel. Änderung vom NB mit Abhängigkeiten
    #[serde(rename = "ZF0")]
    BilaRelAenderungNbAbhaengigkeiten,
    /// Nicht bila.rel. Anfrage an LF
    #[serde(rename = "ZF3")]
    NichtBilaRelAnfrageLf,
    /// Nicht bila.rel. Anfrage an NB
    #[serde(rename = "ZF4")]
    NichtBilaRelAnfrageNb,
    /// Anfrage an MSB mit Abhängigkeiten
    #[serde(rename = "ZF5")]
    AnfrageMsbAbhaengigkeiten,
    /// Bila.rel. Anfrage an LF
    #[serde(rename = "ZF6")]
    BilaRelAnfrageLf,
    /// Bila.rel. Anfrage an NB ohne Abhängigkeiten
    #[serde(rename = "ZF7")]
    BilaRelAnfrageNbOhneAbhaengigkeiten,
    /// Bila.rel. Anfrage an NB mit Abhängigkeiten
    #[serde(rename = "ZF8")]
    BilaRelAnfrageNbAbhaengigkeiten,
    /// Änderung vom MSB ohne Abhängigkeiten
    #[serde(rename = "ZG7")]
    AenderungMsbOhneAbhaengigkeiten,
    /// Anfrage an MSB ohne Abhängigkeiten
    #[serde(rename = "ZG8")]
    AnfrageMsbOhneAbhaengigkeiten,
    /// Änderung der komplexen Marktlokationsstruktur
    #[serde(rename = "ZI9")]
    AenderungKomplexenMarktlokationsstruktur,
    /// Anfrage der Lokationsbündelstruktur
    #[serde(rename = "ZJ0")]
    AnfrageLokationsbuendelstruktur,
    /// Anfrage der komplexen Marktlokationsstruktur
    #[serde(rename = "ZJ1")]
    AnfrageKomplexenMarktlokationsstruktur,
    /// Stammdaten
    #[serde(rename = "ZP3")]
    Stammdaten,
    /// Kündigung aufgrund Vertrag mit Anschlussnehmer
    #[serde(rename = "ZR9")]
    KuendigungAufgrundVertragAnschlussnehmer,
    /// Anzuwenden wenn Ende wegen Kündigung durch bislang beliefernden LF (LFA)
    #[serde(rename = "ZT4")]
    AnzuwendenEndeWegenKuendigungDurchBislangBelieferndenLfLfaEntsteht,
    /// Anzuwenden wenn Ende wegen - Kündigung durch den Kunden, - Kündigung durch ...
    #[serde(rename = "ZT5")]
    AnzuwendenEndeWegenKuendigungDurchKundenKuendigungDurchLfnKeine,
    /// EoG wegen Kündigung durch LF
    #[serde(rename = "ZT6")]
    EogWegenKuendigungDurchLf,
    /// EoG wegen Kündigung durch Kunde/LFN
    #[serde(rename = "ZT7")]
    EogWegenKuendigungDurchKundeLfn,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct KontaktKontakt {
    /// Required (X). (an..256)
    pub name: Option<String>,
}

/// Map key for Marktteilnehmer instances.
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub enum MarktteilnehmerKey {
    /// Dokumenten-/Nachrichtenaussteller bzw. -absender
    #[serde(rename = "MS")]
    Ms,
    /// Nachrichtenempfänger
    #[serde(rename = "MR")]
    Mr,
}

impl std::fmt::Display for MarktteilnehmerKey {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::Ms => write!(f, "MS"),
            Self::Mr => write!(f, "MR"),
        }
    }
}

/// Kontakt for PID 44130 — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Kontakt {
    /// Required (X [1P0..1]). (an..3)
    pub kommunikationsart: Option<Kommunikationsart>,
    /// Required (X). (an..512)
    pub kommunikationsnummer: Option<String>,
    pub kontakt: Option<KontaktKontakt>,
    /// Required (X). (an..3)
    pub kontaktfunktion: Option<Kontaktfunktion>,
}

/// Marktteilnehmer for PID 44130 — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Marktteilnehmer {
    /// Required (unknown). ()
    pub codeliste_code: Option<String>,
    /// Required (X). (an..3)
    pub marktrolle: Option<Marktrolle>,
    /// Required (X). (an..35)
    pub rollencodenummer: Option<String>,
    /// Required (X). (an..3)
    pub rollencodetyp: Option<Rollencodetyp>,
    pub kontakt: Option<Kontakt>,
}

/// Messlokation for PID 44130 — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Messlokation {
    /// Required (X [953]). (an..35)
    pub meldepunkt_id: Option<String>,
}

/// Nachricht for PID 44130 — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Nachricht {
    /// Required (X [931] [494]). (an..35)
    pub erstellungsdatum: Option<String>,
    /// Optional. ()
    pub nachrichtennummer: Option<String>,
    /// Optional. ()
    pub nachrichtentyp: Option<String>,
}

/// Prozessdaten for PID 44130 — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Prozessdaten {
    /// Required (X [UB2]). (an..35)
    pub gueltig_ab: Option<String>,
    /// Required (X [UB2]). (an..35)
    pub gueltigkeitsbeginn: Option<String>,
    /// Optional. (an..70)
    pub pruefidentifikator: Option<Pruefidentifikator>,
    /// Required (unknown). ()
    pub status_code: Option<String>,
    /// Optional. (an..3)
    pub transaktionsgrund: Option<Transaktionsgrund>,
    /// Required (X). (an..35)
    pub vorgang_id: Option<String>,
}

/// PID 44130 transaction — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Transaktion {
    /// Required (Muss [2061]).
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub messlokation: Option<Vec<Messlokation>>,
    pub prozessdaten: Option<Prozessdaten>,
}

/// PID 44130 message-level — Korrektur Meldepunkt vom NB.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct Message {
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_map_or_vec")]
    pub marktteilnehmer: Option<BTreeMap<MarktteilnehmerKey, Marktteilnehmer>>,
    pub nachricht: Option<Nachricht>,
}

/// Complete interchange for PID 44130 — Korrektur Meldepunkt vom NB.
pub type Interchange = crate::model::Interchange<Message, Transaktion>;
