Repository: bo4e/BO4E-python (language: python)

Issue:
Change repo settings to have only default/main branch
Hi, since releases will be built by tagging commits on main and merges to main are not squashed: Is there still a need for the develop branch or could we maybe omit the develop->main merges? 


Discussion / hints:
Suggestion:
- use only main, no develop (unless we have prereleases)
- use tags to mark releases, not commits/PRs to master
Good question.
I thought it could be useful to collect more features on the develop branch and release multiple features at once.
Sometimes there are dependencies between features so it's nice to collect them first.
There is also still my hope to use a tool to get nice version change information.
But I am not sure if therefore a develop branch is necessary.

Fix patch:
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 000000000..9fb855272
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,23 @@
+name: "Test Doc Creation (Sphinx)"
+on: [push]
+jobs:
+  docbuild:
+    name: Check Docs
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        python-version: ["3.10"]
+        os: [ubuntu-latest]
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v2
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install tox
+      - name: Check Docs
+        run: |
+          tox -e docs
diff --git a/README.rst b/README.rst
index 3def9201c..1e5d4d615 100644
--- a/README.rst
+++ b/README.rst
@@ -50,7 +50,7 @@ The created venv should be located somewhere around .tox/dev/Scripts.
 Regular Expression for Enumerations
 -----------------------------------
 
-If you want to add a new enumeration from the `BO4E website`_ then you can use the following regular expression pattern:
+If you want to add a new enumeration from the `BO4E website`_ then you can copy paste HTML table content and use the following regular expression pattern:
 
 .. code-block:: Shell
 
@@ -60,7 +60,7 @@ In combination with this substitution:
 
 .. code-block:: Shell
 
-    "$wert": "$wert", # $bedeutung
+    "$wert": "$wert", #: $bedeutung
 
 This substitution can directly used on the website `regex101`_.
 
@@ -144,4 +144,4 @@ Applications of talented developers are welcome at any time! Please consider vis
 .. _`open new PR develop→master`: https://github.com/Hochfrequenz/BO4E-python/compare/master...develop
 .. _`Draft a new release`: https://github.com/Hochfrequenz/BO4E-python/releases/new
 .. _`Retrieving package version at runtime`: https://pypi.org/project/setuptools-scm/
-.. _`regex101`: https://regex101.com/r/JWeb51/1
+.. _`regex101`: https://regex101.com/r/JWeb51/2
diff --git a/docs/api/bo4e.enum.rst b/docs/api/bo4e.enum.rst
index e12bf356c..d45e2284b 100644
--- a/docs/api/bo4e.enum.rst
+++ b/docs/api/bo4e.enum.rst
@@ -148,6 +148,14 @@ bo4e.enum.sparte module
    :undoc-members:
    :show-inheritance:
 
+bo4e.enum.strenum module
+------------------------
+
+.. automodule:: bo4e.enum.strenum
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
 bo4e.enum.tarifart module
 -------------------------
 
diff --git a/src/bo4e/enum/anrede.py b/src/bo4e/enum/anrede.py
index 3a2250149..9d7a92551 100644
--- a/src/bo4e/enum/anrede.py
+++ b/src/bo4e/enum/anrede.py
@@ -1,14 +1,14 @@
 # pylint: disable=missing-module-docstring
-from bo4e.enum.strenum import DocumentedStrEnum
+from bo4e.enum.strenum import StrEnum
 
 
-class Anrede(DocumentedStrEnum):
+class Anrede(StrEnum):
     """
     Übersicht möglicher Anreden, z.B. eines Geschäftspartners.
     """
 
-    HERR = "HERR", "Herr"
-    FRAU = "FRAU", "Frau"
-    EHELEUTE = "EHELEUTE", "Eheleute"
-    FIRMA = "FIRMA", "Firma"
-    INDIVIDUELL = "INDIVIDUELL", 'Individuell (z.B. "Profx")'
+    HERR = "HERR"  #: "Herr
+    FRAU = "FRAU"  #: Frau
+    EHELEUTE = "EHELEUTE"  #: Eheleute
+    FIRMA = "FIRMA"  #: Firma
+    INDIVIDUELL = "INDIVIDUELL"  #: Individuell (z.B. "Profx")
diff --git a/src/bo4e/enum/bilanzierungsmethode.py b/src/bo4e/enum/bilanzierungsmethode.py
index 3296b0ce7..21e2f0e5e 100644
--- a/src/bo4e/enum/bilanzierungsmethode.py
+++ b/src/bo4e/enum/bilanzierungsmethode.py
@@ -7,8 +7,8 @@ class Bilanzierungsmethode(StrEnum):
     Mit dieser Aufzählung kann zwischen den Bilanzierungsmethoden bzw. -grundlagen unterschieden werden.
     """
 
-    RLM = "RLM"  # Registrierende Leistungsmessung
-    SLP = "SLP"  # Standard Lastprofil
-    TLP_GEMEINSAM = "TLP_GEMEINSAM"  # TLP gemeinsame Messung
-    TLP_GETRENNT = "TLP_GETRENNT"  # TLP getrennte Messung
-    PAUSCHAL = "PAUSCHAL"  # Pauschale Betrachtung (Band)
+    RLM = "RLM"  #: Registrierende Leistungsmessung
+    SLP = "SLP"  #: Standard Lastprofil
+    TLP_GEMEINSAM = "TLP_GEMEINSAM"  #: TLP gemeinsame Messung
+    TLP_GETRENNT = "TLP_GETRENNT"  #: TLP getrennte Messung
+    PAUSCHAL = "PAUSCHAL"  #: Pauschale Betrachtung (Band)
diff --git a/src/bo4e/enum/dienstleistungstyp.py b/src/bo4e/enum/dienstleistungstyp.py
index 9b4c280cb..1bc015dba 100644
--- a/src/bo4e/enum/dienstleistungstyp.py
+++ b/src/bo4e/enum/dienstleistungstyp.py
@@ -9,46 +9,46 @@ class Dienstleistungstyp(StrEnum):
     Auflistung möglicher abzurechnender Dienstleistungen.
     """
 
-    DATENBEREITSTELLUNG_TAEGLICH = "DATENBEREITSTELLUNG_TAEGLICH"  # Datenbereitstellung täglich
-    DATENBEREITSTELLUNG_WOECHENTLICH = "DATENBEREITSTELLUNG_WOECHENTLICH"  # Datenbereitstellung wöchentlich
-    DATENBEREITSTELLUNG_MONATLICH = "DATENBEREITSTELLUNG_MONATLICH"  # Datenbereitstellung monatlich
-    DATENBEREITSTELLUNG_JAEHRLICH = "DATENBEREITSTELLUNG_JAEHRLICH"  # Datenbereitstellung jährlich
+    DATENBEREITSTELLUNG_TAEGLICH = "DATENBEREITSTELLUNG_TAEGLICH"  #: Datenbereitstellung täglich
+    DATENBEREITSTELLUNG_WOECHENTLICH = "DATENBEREITSTELLUNG_WOECHENTLICH"  #: Datenbereitstellung wöchentlich
+    DATENBEREITSTELLUNG_MONATLICH = "DATENBEREITSTELLUNG_MONATLICH"  #: Datenbereitstellung monatlich
+    DATENBEREITSTELLUNG_JAEHRLICH = "DATENBEREITSTELLUNG_JAEHRLICH"  #: Datenbereitstellung jährlich
     DATENBEREITSTELLUNG_HISTORISCHE_LG = "DATENBEREITSTELLUNG_HISTORISCHE_LG"
     # Datenbereitstellung historischer Lastgänge
-    DATENBEREITSTELLUNG_STUENDLICH = "DATENBEREITSTELLUNG_STUENDLICH"  # Datenbereitstellung stündlich
+    DATENBEREITSTELLUNG_STUENDLICH = "DATENBEREITSTELLUNG_STUENDLICH"  #: Datenbereitstellung stündlich
     DATENBEREITSTELLUNG_VIERTELJAEHRLICH = "DATENBEREITSTELLUNG_VIERTELJAEHRLICH"
     # Datenbereitstellung vierteljährlich
-    DATENBEREITSTELLUNG_HALBJAEHRLICH = "DATENBEREITSTELLUNG_HALBJAEHRLICH"  # Datenbereitstellung halbjährlich
+    DATENBEREITSTELLUNG_HALBJAEHRLICH = "DATENBEREITSTELLUNG_HALBJAEHRLICH"  #: Datenbereitstellung halbjährlich
     DATENBEREITSTELLUNG_MONATLICH_ZUSAETZLICH = "DATENBEREITSTELLUNG_MONATLICH_ZUSAETZLICH"
     # Datenbereitstellung monatlich zusätzlich
-    DATENBEREITSTELLUNG_EINMALIG = "DATENBEREITSTELLUNG_EINMALIG"  # Datenbereitstellung einmalig
+    DATENBEREITSTELLUNG_EINMALIG = "DATENBEREITSTELLUNG_EINMALIG"  #: Datenbereitstellung einmalig
     AUSLESUNG_2X_TAEGLICH_FERNAUSLESUNG = "AUSLESUNG_2X_TAEGLICH_FERNAUSLESUNG"
     # Auslesung 2x täglich mittels Fernauslesung
-    AUSLESUNG_TAEGLICH_FERNAUSLESUNG = "AUSLESUNG_TAEGLICH_FERNAUSLESUNG"  # Auslesung täglich mittels Fernauslesung
-    AUSLESUNG_MANUELL_MSB = "AUSLESUNG_MANUELL_MSB"  # Auslesung, manuell vom Messstellenbetreiber vorgenommen
+    AUSLESUNG_TAEGLICH_FERNAUSLESUNG = "AUSLESUNG_TAEGLICH_FERNAUSLESUNG"  #: Auslesung täglich mittels Fernauslesung
+    AUSLESUNG_MANUELL_MSB = "AUSLESUNG_MANUELL_MSB"  #: Auslesung, manuell vom Messstellenbetreiber vorgenommen
     AUSLESUNG_MONATLICH_FERNAUSLESUNG = "AUSLESUNG_MONATLICH_FERNAUSLESUNG"
     # Auslesung monatlich bei mittels Fernauslesung
     AUSLESUNG_JAEHRLICH_FERNAUSLESUNG = "AUSLESUNG_JAEHRLICH_FERNAUSLESUNG"
     # Auslesung jährlich bei SLP mittels Fernauslesung
-    AUSLESUNG_MDE = "AUSLESUNG_MDE"  # Auslesung mit mobiler Daten Erfassung (MDE)
-    ABLESUNG_MONATLICH = "ABLESUNG_MONATLICH"  # Ablesung monatlich
-    ABLESUNG_VIERTELJAEHRLICH = "ABLESUNG_VIERTELJAEHRLICH"  # Ablesung vierteljährlich
-    ABLESUNG_HALBJAEHRLICH = "ABLESUNG_HALBJAEHRLICH"  # Ablesung halbjährlich
-    ABLESUNG_JAEHRLICH = "ABLESUNG_JAEHRLICH"  # Ablesung jährlich
-    AUSLESUNG_FERNAUSLESUNG = "AUSLESUNG_FERNAUSLESUNG"  # Auslesung mittels Fernauslesung
-    ABLESUNG_ZUSAETZLICH_MSB = "ABLESUNG_ZUSAETZLICH_MSB"  # Ablesung, zusätzlich vom Messstellenbetreiber vorgenommen
-    ABLESUNG_ZUSAETZLICH_KUNDE = "ABLESUNG_ZUSAETZLICH_KUNDE"  # Ablesung SLP, zusätzlich vom Kunden vorgenommen
+    AUSLESUNG_MDE = "AUSLESUNG_MDE"  #: Auslesung mit mobiler Daten Erfassung (MDE)
+    ABLESUNG_MONATLICH = "ABLESUNG_MONATLICH"  #: Ablesung monatlich
+    ABLESUNG_VIERTELJAEHRLICH = "ABLESUNG_VIERTELJAEHRLICH"  #: Ablesung vierteljährlich
+    ABLESUNG_HALBJAEHRLICH = "ABLESUNG_HALBJAEHRLICH"  #: Ablesung halbjährlich
+    ABLESUNG_JAEHRLICH = "ABLESUNG_JAEHRLICH"  #: Ablesung jährlich
+    AUSLESUNG_FERNAUSLESUNG = "AUSLESUNG_FERNAUSLESUNG"  #: Auslesung mittels Fernauslesung
+    ABLESUNG_ZUSAETZLICH_MSB = "ABLESUNG_ZUSAETZLICH_MSB"  #: Ablesung, zusätzlich vom Messstellenbetreiber vorgenommen
+    ABLESUNG_ZUSAETZLICH_KUNDE = "ABLESUNG_ZUSAETZLICH_KUNDE"  #: Ablesung SLP, zusätzlich vom Kunden vorgenommen
     AUSLESUNG_FERNAUSLESUNG_ZUSAETZLICH_MSB = "AUSLESUNG_FERNAUSLESUNG_ZUSAETZLICH_MSB"
     # Auslesung, mittels Fernauslesung, zusätzlich vom Messstellenbetreiber vorgenommen
-    AUSLESUNG_MOATLICH_FERNAUSLESUNG = "AUSLESUNG_MOATLICH_FERNAUSLESUNG"  # Auslesung monatlich mittels Fernauslesung
+    AUSLESUNG_MOATLICH_FERNAUSLESUNG = "AUSLESUNG_MOATLICH_FERNAUSLESUNG"  #: Auslesung monatlich mittels Fernauslesung
     AUSLESUNG_STUENDLICH_FERNAUSLESUNG = "AUSLESUNG_STUENDLICH_FERNAUSLESUNG"
     # Auslesung stündlich mittels Fernauslesung
-    AUSLESUNG_TEMPERATURMENGENUMWERTER = "AUSLESUNG_TEMPERATURMENGENUMWERTER"  # Auslesung Temperaturmengenumwerter
-    AUSLESUNG_ZUSTANDSMENGENUMWERTER = "AUSLESUNG_ZUSTANDSMENGENUMWERTER"  # Auslesung Zustandsmengenumwerter
-    AUSLESUNG_SYSTEMMENGENUMWERTER = "AUSLESUNG_SYSTEMMENGENUMWERTER"  # Auslesung Systemmengenumwerter
-    AUSLESUNG_VORGANG = "AUSLESUNG_VORGANG"  # Auslesung je Vorgang
-    AUSLESUNG_KOMPAKTMENGENUMWERTER = "AUSLESUNG_KOMPAKTMENGENUMWERTER"  # Auslesung Kompaktmengenumwerter
-    SPERRUNG = "SPERRUNG"  # Sperrung einer Abnahmestelle
-    ENTSPERRUNG = "ENTSPERRUNG"  # Entsperrung einer Abnahmestelle
-    MAHNKOSTEN = "MAHNKOSTEN"  # Mahnkosten
-    INKASSOKOSTEN = "INKASSOKOSTEN"  # Inkassokosten
+    AUSLESUNG_TEMPERATURMENGENUMWERTER = "AUSLESUNG_TEMPERATURMENGENUMWERTER"  #: Auslesung Temperaturmengenumwerter
+    AUSLESUNG_ZUSTANDSMENGENUMWERTER = "AUSLESUNG_ZUSTANDSMENGENUMWERTER"  #: Auslesung Zustandsmengenumwerter
+    AUSLESUNG_SYSTEMMENGENUMWERTER = "AUSLESUNG_SYSTEMMENGENUMWERTER"  #: Auslesung Systemmengenumwerter
+    AUSLESUNG_VORGANG = "AUSLESUNG_VORGANG"  #: Auslesung je Vorgang
+    AUSLESUNG_KOMPAKTMENGENUMWERTER = "AUSLESUNG_KOMPAKTMENGENUMWERTER"  #: Auslesung Kompaktmengenumwerter
+    SPERRUNG = "SPERRUNG"  #: Sperrung einer Abnahmestelle
+    ENTSPERRUNG = "ENTSPERRUNG"  #: Entsperrung einer Abnahmestelle
+    MAHNKOSTEN = "MAHNKOSTEN"  #: Mahnkosten
+    INKASSOKOSTEN = "INKASSOKOSTEN"  #: Inkassokosten
diff --git a/src/bo4e/enum/energierichtung.py b/src/bo4e/enum/energierichtung.py
index 6fd1646fb..bc279eb4b 100644
--- a/src/bo4e/enum/energierichtung.py
+++ b/src/bo4e/enum/energierichtung.py
@@ -8,5 +8,5 @@ class Energierichtung(StrEnum):
     Spezifiziert die Energierichtung einer Markt- und/oder Messlokation
     """
 
-    AUSSP = "AUSSP"  # Ausspeisung
-    EINSP = "EINSP"  # Einspeisung
+    AUSSP = "AUSSP"  #: Ausspeisung
+    EINSP = "EINSP"  #: Einspeisung
diff --git a/src/bo4e/enum/gasqualitaet.py b/src/bo4e/enum/gasqualitaet.py
index 1c4498bf8..1f6ab6eae 100644
--- a/src/bo4e/enum/gasqualitaet.py
+++ b/src/bo4e/enum/gasqualitaet.py
@@ -8,5 +8,5 @@ class Gasqualitaet(StrEnum):
     Unterscheidung für hoch- und niedrig-kalorisches Gas.
     """
 
-    H_GAS = "H_GAS"  # High Caloric Gas
-    L_GAS = "L_GAS"  # Low Caloric Gas
+    H_GAS = "H_GAS"  #: High Caloric Gas
+    L_GAS = "L_GAS"  #: Low Caloric Gas
diff --git a/src/bo4e/enum/geraetetyp.py b/src/bo4e/enum/geraetetyp.py
index e1a9d23f8..da18fc607 100644
--- a/src/bo4e/enum/geraetetyp.py
+++ b/src/bo4e/enum/geraetetyp.py
@@ -9,47 +9,47 @@ class Geraetetyp(StrEnum):
     Auflistung möglicher abzurechnender Gerätetypen.
     """
 
-    WECHSELSTROMZAEHLER = "WECHSELSTROMZAEHLER"  # Wechselstromzähler
-    DREHSTROMZAEHLER = "DREHSTROMZAEHLER"  # Drehstromzähler
-    ZWEIRICHTUNGSZAEHLER = "ZWEIRICHTUNGSZAEHLER"  # Zweirichtungszähler
-    RLM_ZAEHLER = "RLM_ZAEHLER"  # RLM-Zähler
-    BALGENGASZAEHLER = "BALGENGASZAEHLER"  # Balgengaszähler
-    MAXIMUMZAEHLER = "MAXIMUMZAEHLER"  # Maximumzähler (Schleppzähler)
-    MULTIPLEXANLAGE = "MULTIPLEXANLAGE"  # Multiplexeranlage
-    PAUSCHALANLAGE = "PAUSCHALANLAGE"  # Pauschalanlagen
-    VERSTAERKERANLAGE = "VERSTAERKERANLAGE"  # Verstärkeranlage
-    SUMMATIONSGERAET = "SUMMATIONSGERAET"  # Summationsgerät
-    IMPULSGEBER = "IMPULSGEBER"  # Impulsgeber
-    EDL_21_ZAEHLERAUFSATZ = "EDL_21_ZAEHLERAUFSATZ"  # EDL 21 Zähleraufsatz für Zähler
-    VIER_QUADRANTEN_LASTGANGZAEHLER = "VIER_QUADRANTEN_LASTGANGZAEHLER"  # Vier-Quadranten-Lastgangzähler
-    MENGENUMWERTER = "MENGENUMWERTER"  # Mengenumwerter
-    STROMWANDLER = "STROMWANDLER"  # Stromwandler
-    SPANNUNGSWANDLER = "SPANNUNGSWANDLER"  # Spannungs-Wandler
-    KOMBIMESSWANDLER = "KOMBIMESSWANDLER"  # Kombimesswandler
-    BLOCKSTROMWANDLER = "BLOCKSTROMWANDLER"  # Blockstromwandler
-    DATENLOGGER = "DATENLOGGER"  # Datenlogger
-    KOMMUNIKATIONSANSCHLUSS = "KOMMUNIKATIONSANSCHLUSS"  # Kommunikationsanschluss
-    MODEM = "MODEM"  # Modem
-    TELEKOMMUNIKATIONSEINRICHTUNG = "TELEKOMMUNIKATIONSEINRICHTUNG"  # vom Messstellenbetreiber beigestellte Telekommunikationseinrichtung (Telefonanschluss)
-    DREHKOLBENGASZAEHLER = "DREHKOLBENGASZAEHLER"  # Drehkolbengaszähler
-    TURBINENRADGASZAEHLER = "TURBINENRADGASZAEHLER"  # Turbinenradgaszähler
-    ULTRASCHALLZAEHLER = "ULTRASCHALLZAEHLER"  # Ultraschallzähler
-    WIRBELGASZAEHLER = "WIRBELGASZAEHLER"  # Wirbelgaszähler
-    MODERNE_MESSEINRICHTUNG = "MODERNE_MESSEINRICHTUNG"  # moderne Messeinrichtung
-    INTELLIGENTES_MESSYSTEM = "INTELLIGENTES_MESSYSTEM"  # Intelligentes Messystem
-    ELEKTRONISCHER_HAUSHALTSZAEHLER = "ELEKTRONISCHER_HAUSHALTSZAEHLER"  # elektronischer Haushaltszähler
-    STEUEREINRICHTUNG = "STEUEREINRICHTUNG"  # Steuereinrichtung
-    TARIFSCHALTGERAET = "TARIFSCHALTGERAET"  # Tarifschaltgerät
-    RUNDSTEUEREMPFAENGER = "RUNDSTEUEREMPFAENGER"  # Rundsteuerempfänger
-    OPTIONALE_ZUS_ZAEHLEINRICHTUNG = "OPTIONALE_ZUS_ZAEHLEINRICHTUNG"  # optionale zusätzliche Zähleinrichtung
-    MESSWANDLERSATZ_IMS_MME = "MESSWANDLERSATZ_IMS_MME"  # Messwandlersatz Strom iMS und mME, NSP
-    KOMBIMESSWANDLER_IMS_MME = "KOMBIMESSWANDLER_IMS_MME"  # Kombimesswandlersatz (Strom u. Spg) iMS und mME
-    TARIFSCHALTGERAET_IMS_MME = "TARIFSCHALTGERAET_IMS_MME"  # Tarifschaltung iMS und mME
-    RUNDSTEUEREMPFAENGER_IMS_MME = "RUNDSTEUEREMPFAENGER_IMS_MME"  # Rundsteuerempfänger iMS und mME
-    TEMPERATUR_KOMPENSATION = "TEMPERATUR_KOMPENSATION"  # Temperaturkompensation
-    HOECHSTBELASTUNGS_ANZEIGER = "HOECHSTBELASTUNGS_ANZEIGER"  # Höchsbelastungsanzeiger
-    SONSTIGES_GERAET = "SONSTIGES_GERAET"  # Sonstiges Gerät
-    PREPAYMENTZAEHLER = "PREPAYMENTZAEHLER"  # Prepaymentzähler
-    EDL_21 = "EDL_21"  # EDL21
-    _96_H_ZAEHLER = "96_H_ZAEHLER"  # 96 h Zähler
-    EDL_40_ZAEHLERAUFSATZ = "EDL_40_ZAEHLERAUFSATZ"  # EDL 40 Zähleraufsatz für Zähler
+    WECHSELSTROMZAEHLER = "WECHSELSTROMZAEHLER"  #: Wechselstromzähler
+    DREHSTROMZAEHLER = "DREHSTROMZAEHLER"  #: Drehstromzähler
+    ZWEIRICHTUNGSZAEHLER = "ZWEIRICHTUNGSZAEHLER"  #: Zweirichtungszähler
+    RLM_ZAEHLER = "RLM_ZAEHLER"  #: RLM-Zähler
+    BALGENGASZAEHLER = "BALGENGASZAEHLER"  #: Balgengaszähler
+    MAXIMUMZAEHLER = "MAXIMUMZAEHLER"  #: Maximumzähler (Schleppzähler)
+    MULTIPLEXANLAGE = "MULTIPLEXANLAGE"  #: Multiplexeranlage
+    PAUSCHALANLAGE = "PAUSCHALANLAGE"  #: Pauschalanlagen
+    VERSTAERKERANLAGE = "VERSTAERKERANLAGE"  #: Verstärkeranlage
+    SUMMATIONSGERAET = "SUMMATIONSGERAET"  #: Summationsgerät
+    IMPULSGEBER = "IMPULSGEBER"  #: Impulsgeber
+    EDL_21_ZAEHLERAUFSATZ = "EDL_21_ZAEHLERAUFSATZ"  #: EDL 21 Zähleraufsatz für Zähler
+    VIER_QUADRANTEN_LASTGANGZAEHLER = "VIER_QUADRANTEN_LASTGANGZAEHLER"  #: Vier-Quadranten-Lastgangzähler
+    MENGENUMWERTER = "MENGENUMWERTER"  #: Mengenumwerter
+    STROMWANDLER = "STROMWANDLER"  #: Stromwandler
+    SPANNUNGSWANDLER = "SPANNUNGSWANDLER"  #: Spannungs-Wandler
+    KOMBIMESSWANDLER = "KOMBIMESSWANDLER"  #: Kombimesswandler
+    BLOCKSTROMWANDLER = "BLOCKSTROMWANDLER"  #: Blockstromwandler
+    DATENLOGGER = "DATENLOGGER"  #: Datenlogger
+    KOMMUNIKATIONSANSCHLUSS = "KOMMUNIKATIONSANSCHLUSS"  #: Kommunikationsanschluss
+    MODEM = "MODEM"  #: Modem
+    TELEKOMMUNIKATIONSEINRICHTUNG = "TELEKOMMUNIKATIONSEINRICHTUNG"  #: vom Messstellenbetreiber beigestellte Telekommunikationseinrichtung (Telefonanschluss)
+    DREHKOLBENGASZAEHLER = "DREHKOLBENGASZAEHLER"  #: Drehkolbengaszähler
+    TURBINENRADGASZAEHLER = "TURBINENRADGASZAEHLER"  #: Turbinenradgaszähler
+    ULTRASCHALLZAEHLER = "ULTRASCHALLZAEHLER"  #: Ultraschallzähler
+    WIRBELGASZAEHLER = "WIRBELGASZAEHLER"  #: Wirbelgaszähler
+    MODERNE_MESSEINRICHTUNG = "MODERNE_MESSEINRICHTUNG"  #: moderne Messeinrichtung
+    INTELLIGENTES_MESSYSTEM = "INTELLIGENTES_MESSYSTEM"  #: Intelligentes Messystem
+    ELEKTRONISCHER_HAUSHALTSZAEHLER = "ELEKTRONISCHER_HAUSHALTSZAEHLER"  #: elektronischer Haushaltszähler
+    STEUEREINRICHTUNG = "STEUEREINRICHTUNG"  #: Steuereinrichtung
+    TARIFSCHALTGERAET = "TARIFSCHALTGERAET"  #: Tarifschaltgerät
+    RUNDSTEUEREMPFAENGER = "RUNDSTEUEREMPFAENGER"  #: Rundsteuerempfänger
+    OPTIONALE_ZUS_ZAEHLEINRICHTUNG = "OPTIONALE_ZUS_ZAEHLEINRICHTUNG"  #: optionale zusätzliche Zähleinrichtung
+    MESSWANDLERSATZ_IMS_MME = "MESSWANDLERSATZ_IMS_MME"  #: Messwandlersatz Strom iMS und mME, NSP
+    KOMBIMESSWANDLER_IMS_MME = "KOMBIMESSWANDLER_IMS_MME"  #: Kombimesswandlersatz (Strom u. Spg) iMS und mME
+    TARIFSCHALTGERAET_IMS_MME = "TARIFSCHALTGERAET_IMS_MME"  #: Tarifschaltung iMS und mME
+    RUNDSTEUEREMPFAENGER_IMS_MME = "RUNDSTEUEREMPFAENGER_IMS_MME"  #: Rundsteuerempfänger iMS und mME
+    TEMPERATUR_KOMPENSATION = "TEMPERATUR_KOMPENSATION"  #: Temperaturkompensation
+    HOECHSTBELASTUNGS_ANZEIGER = "HOECHSTBELASTUNGS_ANZEIGER"  #: Höchsbelastungsanzeiger
+    SONSTIGES_GERAET = "SONSTIGES_GERAET"  #: Sonstiges Gerät
+    PREPAYMENTZAEHLER = "PREPAYMENTZAEHLER"  #: Prepaymentzähler
+    EDL_21 = "EDL_21"  #: EDL21
+    _96_H_ZAEHLER = "96_H_ZAEHLER"  #: 96 h Zähler
+    EDL_40_ZAEHLERAUFSATZ = "EDL_40_ZAEHLERAUFSATZ"  #: EDL 40 Zähleraufsatz für Zähler
diff --git a/src/bo4e/enum/marktrolle.py b/src/bo4e/enum/marktrolle.py
index ac0f33f53..d0bfd7de9 100644
--- a/src/bo4e/enum/marktrolle.py
+++ b/src/bo4e/enum/marktrolle.py
@@ -8,17 +8,17 @@ class Marktrolle(StrEnum):
     Diese Rollen kann ein Marktteilnehmer einnehmen.
     """
 
-    NB = "NB"  # Grid Operator
-    LF = "LF"  # Supplier
-    MSB = "MSB"  # Messstellenbetreiber
-    DL = "DL"  # Dienstleister
-    BKV = "BKV"  # Bilanzkreisverantwortlicher,
-    BKO = "BKO"  # Bilanzkoordinator / Marktgebietsverantwortlicher
-    UENB = "UENB"  # Übertragungsnetzbetreiber
-    KUNDE_SELBST_NN = "KUNDE_SELBST_NN"  # Kunden, die Netznutzungsentgelte selbst zahlen
-    MGV = "MGV"  # Marktgebietsverantwortlicher
-    EIV = "EIV"  # Einsatzverantwortlicher
-    RB = "RB"  # Registerbetreiber
+    NB = "NB"  #: Grid Operator
+    LF = "LF"  #: Supplier
+    MSB = "MSB"  #: Messstellenbetreiber
+    DL = "DL"  #: Dienstleister
+    BKV = "BKV"  #: Bilanzkreisverantwortlicher,
+    BKO = "BKO"  #: Bilanzkoordinator / Marktgebietsverantwortlicher
+    UENB = "UENB"  #: Übertragungsnetzbetreiber
+    KUNDE_SELBST_NN = "KUNDE_SELBST_NN"  #: Kunden, die Netznutzungsentgelte selbst zahlen
+    MGV = "MGV"  #: Marktgebietsverantwortlicher
+    EIV = "EIV"  #: Einsatzverantwortlicher
+    RB = "RB"  #: Registerbetreiber
     KUNDE = "KUNDE"
     INTERESSENT = "INTERESSENT"
-    BTR = "BTR"  # Betreiber einer technischen Ressource
+    BTR = "BTR"  #: Betreiber einer technischen Ressource
diff --git a/src/bo4e/enum/mengeneinheit.py b/src/bo4e/enum/mengeneinheit.py
index 4caaa83d1..1b6f86695 100644
--- a/src/bo4e/enum/mengeneinheit.py
+++ b/src/bo4e/enum/mengeneinheit.py
@@ -8,17 +8,17 @@ class Mengeneinheit(StrEnum):
     Einheit: Messgrößen, die per Messung oder Vorgabe ermittelt werden können.
     """
 
-    W = "W"  # Watt
-    WH = "WH"  # Wattstunde
-    KW = "KW"  # Kilowatt
-    KWH = "KWH"  # Kilowattstunde
-    KVARH = "KVARH"  # Kilovarstunde
-    MW = "MW"  # Megawatt
-    MWH = "MWH"  # Megawattstunde
-    STUECK = "STUECK"  # Stückzahl
-    KUBIKMETER = "KUBIKMETER"  # Kubikmeter (Gas)
-    STUNDE = "STUNDE"  # Stunde
-    TAG = "TAG"  # Tage
-    MONAT = "MONAT"  # Monat
-    JAHR = "JAHR"  # Jahr
-    PROZENT = "PROZENT"  # Prozent
+    W = "W"  #: Watt
+    WH = "WH"  #: Wattstunde
+    KW = "KW"  #: Kilowatt
+    KWH = "KWH"  #: Kilowattstunde
+    KVARH = "KVARH"  #: Kilovarstunde
+    MW = "MW"  #: Megawatt
+    MWH = "MWH"  #: Megawattstunde
+    STUECK = "STUECK"  #: Stückzahl
+    KUBIKMETER = "KUBIKMETER"  #: Kubikmeter (Gas)
+    STUNDE = "STUNDE"  #: Stunde
+    TAG = "TAG"  #: Tage
+    MONAT = "MONAT"  #: Monat
+    JAHR = "JAHR"  #: Jahr
+    PROZENT = "PROZENT"  #: Prozent
diff --git a/src/bo4e/enum/netzebene.py b/src/bo4e/enum/netzebene.py
index 0479c1bd8..312e852e0 100644
--- a/src/bo4e/enum/netzebene.py
+++ b/src/bo4e/enum/netzebene.py
@@ -8,13 +8,13 @@ class Netzebene(StrEnum):
     Auflistung möglicher Netzebenen innerhalb der Energiearten Strom und Gas.
     """
 
-    NSP = "NSP"  # Niederspannung; Strom
-    MSP = "MSP"  # Mittelspannung; Strom
-    HSP = "HSP"  # Hochspannung; Strom
-    HSS = "HSS"  # Hoechstspannung; Strom
-    MSP_NSP_UMSP = "MSP_NSP_UMSP"  # MS/NS Umspannung; Strom
-    HSP_MSP_UMSP = "HSP_MSP_UMSP"  # HS/MS Umspannung; Strom
-    HSS_HSP_UMSP = "HSS_HSP_UMSP"  # HOES/HS Umspannung; Strom
-    HD = "HD"  # Hochdruck; Gas
-    MD = "MD"  # Mitteldruck; Gas
-    ND = "ND"  # Niederdruck; Gas
+    NSP = "NSP"  #: Niederspannung; Strom
+    MSP = "MSP"  #: Mittelspannung; Strom
+    HSP = "HSP"  #: Hochspannung; Strom
+    HSS = "HSS"  #: Hoechstspannung; Strom
+    MSP_NSP_UMSP = "MSP_NSP_UMSP"  #: MS/NS Umspannung; Strom
+    HSP_MSP_UMSP = "HSP_MSP_UMSP"  #: HS/MS Umspannung; Strom
+    HSS_HSP_UMSP = "HSS_HSP_UMSP"  #: HOES/HS Umspannung; Strom
+    HD = "HD"  #: Hochdruck; Gas
+    MD = "MD"  #: Mitteldruck; Gas
+    ND = "ND"  #: Niederdruck; Gas
diff --git a/src/bo4e/enum/rollencodetyp.py b/src/bo4e/enum/rollencodetyp.py
index fe46d6849..d918c3a39 100644
--- a/src/bo4e/enum/rollencodetyp.py
+++ b/src/bo4e/enum/rollencodetyp.py
@@ -8,6 +8,6 @@ class Rollencodetyp(StrEnum):
     Gibt den Codetyp einer Rolle, beispielsweise einer Marktrolle, an.
     """
 
-    BDEW = "BDEW"  # Bundesverband der Energie- u. Wasserwirtschaft
-    DVG = "DVG"  # Deutscher Verein des Gas- und Wasserfaches
-    GLN = "GLN"  # Global Location Number
+    BDEW = "BDEW"  #: Bundesverband der Energie- u. Wasserwirtschaft
+    DVG = "DVG"  #: Deutscher Verein des Gas- und Wasserfaches
+    GLN = "GLN"  #: Global Location Number
diff --git a/src/bo4e/enum/rufnummernart.py b/src/bo4e/enum/rufnummernart.py
index 5b1928dfd..1236c105c 100644
--- a/src/bo4e/enum/rufnummernart.py
+++ b/src/bo4e/enum/rufnummernart.py
@@ -8,12 +8,12 @@ class Rufnummernart(StrEnum):
     Abbildung verschiedener Rufnummerntypen.
     """
 
-    RUF_ZENTRALE = "RUF_ZENTRALE"  # Rufnummer Zentrale
-    FAX_ZENTRALE = "FAX_ZENTRALE"  # Faxnummer Zentrale
-    SAMMELRUF = "SAMMELRUF"  # Sammelrufnummer
-    SAMMELFAX = "SAMMELFAX"  # Sammelfaxnummer
-    ABTEILUNGRUF = "ABTEILUNGRUF"  # Rufnummer Abteilung
-    ABTEILUNGFAX = "ABTEILUNGFAX"  # Faxnummer Abteilung
-    RUF_DURCHWAHL = "RUF_DURCHWAHL"  # Rufnummer Durchwahl
-    FAX_DURCHWAHL = "FAX_DURCHWAHL"  # Faxnummer Durchwahl
-    MOBIL_NUMMER = "MOBIL_NUMMER"  # Nummer des mobilen Telefons
+    RUF_ZENTRALE = "RUF_ZENTRALE"  #: Rufnummer Zentrale
+    FAX_ZENTRALE = "FAX_ZENTRALE"  #: Faxnummer Zentrale
+    SAMMELRUF = "SAMMELRUF"  #: Sammelrufnummer
+    SAMMELFAX = "SAMMELFAX"  #: Sammelfaxnummer
+    ABTEILUNGRUF = "ABTEILUNGRUF"  #: Rufnummer Abteilung
+    ABTEILUNGFAX = "ABTEILUNGFAX"  #: Faxnummer Abteilung
+    RUF_DURCHWAHL = "RUF_DURCHWAHL"  #: Rufnummer Durchwahl
+    FAX_DURCHWAHL = "FAX_DURCHWAHL"  #: Faxnummer Durchwahl
+    MOBIL_NUMMER = "MOBIL_NUMMER"  #: Nummer des mobilen Telefons
diff --git a/src/bo4e/enum/strenum.py b/src/bo4e/enum/strenum.py
index 3b9273844..d43169921 100644
--- a/src/bo4e/enum/strenum.py
+++ b/src/bo4e/enum/strenum.py
@@ -12,25 +12,3 @@ class StrEnum(str, Enum):
     """
 
     # see https://docs.python.org/3/library/enum.html?highlight=strenum#others
-
-
-# pylint: disable=too-few-public-methods
-class DocumentedStrEnum(StrEnum):
-    """
-    A StrEnum that has docstrings attached to its members.
-    Use it like this:
-    class MyDocumentedEnum(DocumentedStrEnum):
-        Foo = "Serialized Foo", "my good docstring of Foo"
-        Bar = "Serialized Bar", "bar is not foo (this is a docstring)"
-    Then wherever MyDocumentedEnum is used in BOs or COMs, the attribute will serialize as either "Serialized Foo"
-    or "Serialized Bar". And inspect.getdocs(MyDocumentedEnum.Foo) will return the respective docstring.
-    This is unittested.
-    """
-
-    # see https://stackoverflow.com/a/50473952/10009545
-    def __new__(cls, value, doc=None):
-        self = str.__new__(cls, value)  # calling super().__new__(value) here would fail
-        self._value_ = value
-        if doc is not None:
-            self.__doc__ = doc
-        return self
diff --git a/src/bo4e/enum/tarifart.py b/src/bo4e/enum/tarifart.py
index 43835491b..8b4c11b2f 100644
--- a/src/bo4e/enum/tarifart.py
+++ b/src/bo4e/enum/tarifart.py
@@ -8,8 +8,8 @@ class Tarifart(StrEnum):
     Die Tarifart wird verwendet zur Charakterisierung von Zählern und daraus resultierenden Tarifen.
     """
 
-    EINTARIF = "EINTARIF"  # Eintarif
-    ZWEITARIF = "ZWEITARIF"  # Zweitarif
-    MEHRTARIF = "MEHRTARIF"  # Mehrtarif
-    SMART_METER = "SMART_METER"  # Smart Meter Tarif
-    LEISTUNGSGEMESSEN = "LEISTUNGSGEMESSEN"  # Leistungsgemessener Tarif
+    EINTARIF = "EINTARIF"  #: Eintarif
+    ZWEITARIF = "ZWEITARIF"  #: Zweitarif
+    MEHRTARIF = "MEHRTARIF"  #: Mehrtarif
+    SMART_METER = "SMART_METER"  #: Smart Meter Tarif
+    LEISTUNGSGEMESSEN = "LEISTUNGSGEMESSEN"  #: Leistungsgemessener Tarif
diff --git a/src/bo4e/enum/themengebiet.py b/src/bo4e/enum/themengebiet.py
index 5f343d034..127bc3f12 100644
--- a/src/bo4e/enum/themengebiet.py
+++ b/src/bo4e/enum/themengebiet.py
@@ -8,64 +8,64 @@ class Themengebiet(StrEnum):
     Über dieses ENUM kann eine thematische Zuordnung, beispielsweise eines Ansprechpartners, vorgenommen werden.
     """
 
-    ALLGEMEINER_INFORMATIONSAUSTAUSCH = "ALLGEMEINER_INFORMATIONSAUSTAUSCH"  # Allgemeiner Informationsaustausch
-    AN_UND_ABMELDUNG = "AN_UND_ABMELDUNG"  # An- und Abmeldung
-    ANSPRECHPARTNER_ALLGEMEIN = "ANSPRECHPARTNER_ALLGEMEIN"  # Ansprechpartner Allgemein
-    ANSPRECHPARTNER_BDEW_DVGW = "ANSPRECHPARTNER_BDEW_DVGW"  # Ansprechpartner BDEW/DVGW
-    ANSPRECHPARTNER_IT_TECHNIK = "ANSPRECHPARTNER_IT_TECHNIK"  # Ansprechpartner IT/Technik
-    BILANZIERUNG = "BILANZIERUNG"  # Bilanzierung
-    BILANZKREISKOORDINATOR = "BILANZKREISKOORDINATOR"  # Bilanzkreiskoordinator
-    BILANZKREISVERANTWORTLICHER = "BILANZKREISVERANTWORTLICHER"  # Bilanzkreisverantwortlicher
+    ALLGEMEINER_INFORMATIONSAUSTAUSCH = "ALLGEMEINER_INFORMATIONSAUSTAUSCH"  #: Allgemeiner Informationsaustausch
+    AN_UND_ABMELDUNG = "AN_UND_ABMELDUNG"  #: An- und Abmeldung
+    ANSPRECHPARTNER_ALLGEMEIN = "ANSPRECHPARTNER_ALLGEMEIN"  #: Ansprechpartner Allgemein
+    ANSPRECHPARTNER_BDEW_DVGW = "ANSPRECHPARTNER_BDEW_DVGW"  #: Ansprechpartner BDEW/DVGW
+    ANSPRECHPARTNER_IT_TECHNIK = "ANSPRECHPARTNER_IT_TECHNIK"  #: Ansprechpartner IT/Technik
+    BILANZIERUNG = "BILANZIERUNG"  #: Bilanzierung
+    BILANZKREISKOORDINATOR = "BILANZKREISKOORDINATOR"  #: Bilanzkreiskoordinator
+    BILANZKREISVERANTWORTLICHER = "BILANZKREISVERANTWORTLICHER"  #: Bilanzkreisverantwortlicher
     DATENFORMATE_ZERTIFIKATE_VERSCHLUESSELUNGEN = (
-        "DATENFORMATE_ZERTIFIKATE_VERSCHLUESSELUNGEN"  # Datenformate, Zertifikate, Verschlüsselungen
+        "DATENFORMATE_ZERTIFIKATE_VERSCHLUESSELUNGEN"  #: Datenformate, Zertifikate, Verschlüsselungen
     )
-    DEBITORENMANAGEMENT = "DEBITORENMANAGEMENT"  # Debitorenmanagement
-    DEMAND_SIDE_MANAGEMENT = "DEMAND_SIDE_MANAGEMENT"  # Demand-Side-Management
-    EDI_VEREINBARUNG = "EDI_VEREINBARUNG"  # EDI-Vereinbarung
-    EDIFACT = "EDIFACT"  # EDIFACT
-    ENERGIEDATENMANAGEMENT = "ENERGIEDATENMANAGEMENT"  # Energiedatenmanagement
-    FAHRPLANMANAGEMENT = "FAHRPLANMANAGEMENT"  # Fahrplanmanagement
-    ALOCAT = "ALOCAT"  # Format:ALOCAT
-    APERAK = "APERAK"  # Format:APERAK
-    CONTRL = "CONTRL"  # Format:CONTRL
-    INVOIC = "INVOIC"  # Format:INVOIC
-    MSCONS = "MSCONS"  # Format:MSCONS
-    ORDERS = "ORDERS"  # Format:ORDERS
-    ORDERSP = "ORDERSP"  # Format:ORDERSP
-    REMADV = "REMADV"  # Format:REMADV
-    UTILMD = "UTILMD"  # Format:UTILMD
-    GABI = "GABI"  # GaBi Gas
-    GELI = "GELI"  # GeLi Gas
-    GERAETERUECKGABE = "GERAETERUECKGABE"  # Geräterückgabe
-    GERAETEWECHSEL = "GERAETEWECHSEL"  # Gerätewechsel
-    GPKE = "GPKE"  # GPKE
-    INBETRIEBNAHME = "INBETRIEBNAHME"  # Inbetriebnahme
-    KAPAZITAETSMANAGEMENT = "KAPAZITAETSMANAGEMENT"  # Kapazitätsmanagement
-    KLAERFAELLE = "KLAERFAELLE"  # Klärfälle
-    LASTGAENGE_RLM = "LASTGAENGE_RLM"  # Lastgänge RLM
-    LIEFERANTENRAHMENVERTRAG = "LIEFERANTENRAHMENVERTRAG"  # Lieferantenrahmenvertrag
-    LIEFERANTENWECHSEL = "LIEFERANTENWECHSEL"  # Lieferantenwechsel
-    MABIS = "MABIS"  # MaBiS
-    MAHNWESEN = "MAHNWESEN"  # Mahnwesen
-    MARKTGEBIETSVERANTWORTLICHER = "MARKTGEBIETSVERANTWORTLICHER"  # Marktgebietsverantwortlicher
-    MARKTKOMMUNIKATION = "MARKTKOMMUNIKATION"  # Marktkommunikation
-    MEHR_MINDERMENGEN = "MEHR_MINDERMENGEN"  # Mehr- Mindermengen
-    MSB_MDL = "MSB_MDL"  # MSB - MDL
-    NETZABRECHNUNG = "NETZABRECHNUNG"  # Netzabrechnung
-    NETZENTGELTE = "NETZENTGELTE"  # Netzentgelte
-    NETZMANAGEMENT = "NETZMANAGEMENT"  # Netzmanagement
-    RECHT = "RECHT"  # Recht
-    REGULIERUNGSMANAGEMENT = "REGULIERUNGSMANAGEMENT"  # Regulierungsmanagement
-    REKLAMATIONEN = "REKLAMATIONEN"  # Reklamationen
-    SPERREN_ENTSPERREN_INKASSO = "SPERREN_ENTSPERREN_INKASSO"  # Sperren/Entsperren/Inkasso
-    STAMMDATEN = "STAMMDATEN"  # Stammdaten
-    STOERUNGSFAELLE = "STOERUNGSFAELLE"  # Übermittlung_Störungsfälle
-    TECHNISCHE_FRAGEN = "TECHNISCHE_FRAGEN"  # Technische Fragen
-    UMSTELLUNG_INVOIC = "UMSTELLUNG_INVOIC"  # Umstellung INVOIC
-    VERSCHLUESSELUNG_SIGNATUR = "VERSCHLUESSELUNG_SIGNATUR"  # Verschlüsselung/Signatur
-    VERTRAGSMANAGEMENT = "VERTRAGSMANAGEMENT"  # Vertragsmanagement
-    VERTRIEB = "VERTRIEB"  # Vertrieb
-    WIM = "WIM"  # WiM
-    ZAEHLERSTAENDE_SLP = "ZAEHLERSTAENDE_SLP"  # Zählerstände SLP
-    ZAHLUNGSVERKEHR = "ZAHLUNGSVERKEHR"  # Zahlungsverkehr
-    ZUORDNUNGSVEREINBARUNG = "ZUORDNUNGSVEREINBARUNG"  # Zuordnungsvereinbarung
+    DEBITORENMANAGEMENT = "DEBITORENMANAGEMENT"  #: Debitorenmanagement
+    DEMAND_SIDE_MANAGEMENT = "DEMAND_SIDE_MANAGEMENT"  #: Demand-Side-Management
+    EDI_VEREINBARUNG = "EDI_VEREINBARUNG"  #: EDI-Vereinbarung
+    EDIFACT = "EDIFACT"  #: EDIFACT
+    ENERGIEDATENMANAGEMENT = "ENERGIEDATENMANAGEMENT"  #: Energiedatenmanagement
+    FAHRPLANMANAGEMENT = "FAHRPLANMANAGEMENT"  #: Fahrplanmanagement
+    ALOCAT = "ALOCAT"  #: Format:ALOCAT
+    APERAK = "APERAK"  #: Format:APERAK
+    CONTRL = "CONTRL"  #: Format:CONTRL
+    INVOIC = "INVOIC"  #: Format:INVOIC
+    MSCONS = "MSCONS"  #: Format:MSCONS
+    ORDERS = "ORDERS"  #: Format:ORDERS
+    ORDERSP = "ORDERSP"  #: Format:ORDERSP
+    REMADV = "REMADV"  #: Format:REMADV
+    UTILMD = "UTILMD"  #: Format:UTILMD
+    GABI = "GABI"  #: GaBi Gas
+    GELI = "GELI"  #: GeLi Gas
+    GERAETERUECKGABE = "GERAETERUECKGABE"  #: Geräterückgabe
+    GERAETEWECHSEL = "GERAETEWECHSEL"  #: Gerätewechsel
+    GPKE = "GPKE"  #: GPKE
+    INBETRIEBNAHME = "INBETRIEBNAHME"  #: Inbetriebnahme
+    KAPAZITAETSMANAGEMENT = "KAPAZITAETSMANAGEMENT"  #: Kapazitätsmanagement
+    KLAERFAELLE = "KLAERFAELLE"  #: Klärfälle
+    LASTGAENGE_RLM = "LASTGAENGE_RLM"  #: Lastgänge RLM
+    LIEFERANTENRAHMENVERTRAG = "LIEFERANTENRAHMENVERTRAG"  #: Lieferantenrahmenvertrag
+    LIEFERANTENWECHSEL = "LIEFERANTENWECHSEL"  #: Lieferantenwechsel
+    MABIS = "MABIS"  #: MaBiS
+    MAHNWESEN = "MAHNWESEN"  #: Mahnwesen
+    MARKTGEBIETSVERANTWORTLICHER = "MARKTGEBIETSVERANTWORTLICHER"  #: Marktgebietsverantwortlicher
+    MARKTKOMMUNIKATION = "MARKTKOMMUNIKATION"  #: Marktkommunikation
+    MEHR_MINDERMENGEN = "MEHR_MINDERMENGEN"  #: Mehr- Mindermengen
+    MSB_MDL = "MSB_MDL"  #: MSB - MDL
+    NETZABRECHNUNG = "NETZABRECHNUNG"  #: Netzabrechnung
+    NETZENTGELTE = "NETZENTGELTE"  #: Netzentgelte
+    NETZMANAGEMENT = "NETZMANAGEMENT"  #: Netzmanagement
+    RECHT = "RECHT"  #: Recht
+    REGULIERUNGSMANAGEMENT = "REGULIERUNGSMANAGEMENT"  #: Regulierungsmanagement
+    REKLAMATIONEN = "REKLAMATIONEN"  #: Reklamationen
+    SPERREN_ENTSPERREN_INKASSO = "SPERREN_ENTSPERREN_INKASSO"  #: Sperren/Entsperren/Inkasso
+    STAMMDATEN = "STAMMDATEN"  #: Stammdaten
+    STOERUNGSFAELLE = "STOERUNGSFAELLE"  #: Übermittlung_Störungsfälle
+    TECHNISCHE_FRAGEN = "TECHNISCHE_FRAGEN"  #: Technische Fragen
+    UMSTELLUNG_INVOIC = "UMSTELLUNG_INVOIC"  #: Umstellung INVOIC
+    VERSCHLUESSELUNG_SIGNATUR = "VERSCHLUESSELUNG_SIGNATUR"  #: Verschlüsselung/Signatur
+    VERTRAGSMANAGEMENT = "VERTRAGSMANAGEMENT"  #: Vertragsmanagement
+    VERTRIEB = "VERTRIEB"  #: Vertrieb
+    WIM = "WIM"  #: WiM
+    ZAEHLERSTAENDE_SLP = "ZAEHLERSTAENDE_SLP"  #: Zählerstände SLP
+    ZAHLUNGSVERKEHR = "ZAHLUNGSVERKEHR"  #: Zahlungsverkehr
+    ZUORDNUNGSVEREINBARUNG = "ZUORDNUNGSVEREINBARUNG"  #: Zuordnungsvereinbarung
diff --git a/src/bo4e/enum/titel.py b/src/bo4e/enum/titel.py
index dc48ab6a6..169cbdfdc 100644
--- a/src/bo4e/enum/titel.py
+++ b/src/bo4e/enum/titel.py
@@ -8,6 +8,6 @@ class Titel(StrEnum):
     Übersicht möglicher Titel, z.B. eines Geschäftspartners.
     """
 
-    DR = "DR"  # Doktor*In
-    PROF = "PROF"  # Professor*In
-    PROF_DR = "PROF_DR"  # Professor*In Dr.
+    DR = "DR"  #: Doktor*In
+    PROF = "PROF"  #: Professor*In
+    PROF_DR = "PROF_DR"  #: Professor*In Dr.
diff --git a/src/bo4e/enum/verbrauchsart.py b/src/bo4e/enum/verbrauchsart.py
index 8cec4704a..4ccdb1b95 100644
--- a/src/bo4e/enum/verbrauchsart.py
+++ b/src/bo4e/enum/verbrauchsart.py
@@ -8,8 +8,8 @@ class Verbrauchsart(StrEnum):
     Verbrauchsart einer Marktlokation.
     """
 
-    KL = "KL"  # Kraft/Licht
-    KLW = "KLW"  # Kraft/Licht/Wärme
-    KLWS = "KLWS"  # Kraft/Licht/Wärme/Speicherheizung
-    W = "W"  # Wärme
-    WS = "WS"  # Wärme/Speicherheizung
+    KL = "KL"  #: Kraft/Licht
+    KLW = "KLW"  #: Kraft/Licht/Wärme
+    KLWS = "KLWS"  #: Kraft/Licht/Wärme/Speicherheizung
+    W = "W"  #: Wärme
+    WS = "WS"  #: Wärme/Speicherheizung
diff --git a/src/bo4e/enum/vertragsart.py b/src/bo4e/enum/vertragsart.py
index 94b8853ca..347c061c7 100644
--- a/src/bo4e/enum/vertragsart.py
+++ b/src/bo4e/enum/vertragsart.py
@@ -8,8 +8,8 @@ class Vertragsart(StrEnum):
     Aufzählung der Vertragsarten.
     """
 
-    ENERGIELIEFERVERTRAG = "ENERGIELIEFERVERTRAG"  # Energieliefervertrag
-    NETZNUTZUNGSVERTRAG = "NETZNUTZUNGSVERTRAG"  # Netznutzungsvertrag
-    BILANZIERUNGSVERTRAG = "BILANZIERUNGSVERTRAG"  # Bilanzierungsvertrag
-    MESSSTELLENBETRIEBSVERTRAG = "MESSSTELLENBETRIEBSVERTRAG"  # Messstellenabetriebsvertrag
-    BUENDELVERTRAG = "BUENDELVERTRAG"  # Bündelvertrag
+    ENERGIELIEFERVERTRAG = "ENERGIELIEFERVERTRAG"  #: Energieliefervertrag
+    NETZNUTZUNGSVERTRAG = "NETZNUTZUNGSVERTRAG"  #: Netznutzungsvertrag
+    BILANZIERUNGSVERTRAG = "BILANZIERUNGSVERTRAG"  #: Bilanzierungsvertrag
+    MESSSTELLENBETRIEBSVERTRAG = "MESSSTELLENBETRIEBSVERTRAG"  #: Messstellenabetriebsvertrag
+    BUENDELVERTRAG = "BUENDELVERTRAG"  #: Bündelvertrag
diff --git a/src/bo4e/enum/vertragsstatus.py b/src/bo4e/enum/vertragsstatus.py
index aa676fd7d..b744cd348 100644
--- a/src/bo4e/enum/vertragsstatus.py
+++ b/src/bo4e/enum/vertragsstatus.py
@@ -8,12 +8,12 @@ class Vertragsstatus(StrEnum):
     Abbildung einer Statusinformation für Verträge.
     """
 
-    IN_ARBEIT = "IN_ARBEIT"  # in Arbeit
-    UEBERMITTELT = "UEBERMITTELT"  # übermittelt
-    ANGENOMMEN = "ANGENOMMEN"  # angenommen
-    AKTIV = "AKTIV"  # aktiv
-    ABGELEHNT = "ABGELEHNT"  # abgelehnt
-    WIDERRUFEN = "WIDERRUFEN"  # widerrufen
-    STORNIERT = "STORNIERT"  # storniert
-    GEKUENDIGT = "GEKUENDIGT"  # gekündigt
-    BEENDET = "BEENDET"  # beendet
+    IN_ARBEIT = "IN_ARBEIT"  #: in Arbeit
+    UEBERMITTELT = "UEBERMITTELT"  #: übermittelt
+    ANGENOMMEN = "ANGENOMMEN"  #: angenommen
+    AKTIV = "AKTIV"  #: aktiv
+    ABGELEHNT = "ABGELEHNT"  #: abgelehnt
+    WIDERRUFEN = "WIDERRUFEN"  #: widerrufen
+    STORNIERT = "STORNIERT"  #: storniert
+    GEKUENDIGT = "GEKUENDIGT"  #: gekündigt
+    BEENDET = "BEENDET"  #: beendet
diff --git a/src/bo4e/enum/zaehlerauspraegung.py b/src/bo4e/enum/zaehlerauspraegung.py
index 809f83326..7c23e290e 100644
--- a/src/bo4e/enum/zaehlerauspraegung.py
+++ b/src/bo4e/enum/zaehlerauspraegung.py
@@ -8,5 +8,5 @@ class Zaehlerauspraegung(StrEnum):
     Gibt an, ob es sich um einen Einrichtungs- oder Zweirichtungszähler handelt.
     """
 
-    EINRICHTUNGSZAEHLER = "EINRICHTUNGSZAEHLER"  # Einrichtungszaehler
-    ZWEIRICHTUNGSZAEHLER = "ZWEIRICHTUNGSZAEHLER"  # Zweirichtungszaehler
+    EINRICHTUNGSZAEHLER = "EINRICHTUNGSZAEHLER"  #: Einrichtungszaehler
+    ZWEIRICHTUNGSZAEHLER = "ZWEIRICHTUNGSZAEHLER"  #: Zweirichtungszaehler
diff --git a/src/bo4e/enum/zaehlertyp.py b/src/bo4e/enum/zaehlertyp.py
index d8b6c52b8..690d67eff 100644
--- a/src/bo4e/enum/zaehlertyp.py
+++ b/src/bo4e/enum/zaehlertyp.py
@@ -8,12 +8,12 @@ class Zaehlertyp(StrEnum):
     Bei diesem Enum handelt es sich um die Abbildung von Zählertypen der Sparten Strom und Gas.
     """
 
-    DREHSTROMZAEHLER = "DREHSTROMZAEHLER"  # Drehstromzähler
-    BALGENGASZAEHLER = "BALGENGASZAEHLER"  # Balgengaszähler
-    DREHKOLBENZAEHLER = "DREHKOLBENZAEHLER"  # Drehkolbengaszähler
-    SMARTMETER = "SMARTMETER"  # Smart Meter Zähler
-    LEISTUNGSZAEHLER = "LEISTUNGSZAEHLER"  # leistungsmessender Zähler
-    MAXIMUMZAEHLER = "MAXIMUMZAEHLER"  # Maximumzähler
-    TURBINENRADGASZAEHLER = "TURBINENRADGASZAEHLER"  # Turbinenradgaszähler
-    ULTRASCHALLGASZAEHLER = "ULTRASCHALLGASZAEHLER"  # Ultraschallgaszähler
-    WECHSELSTROMZAEHLER = "WECHSELSTROMZAEHLER"  # Wechselstromzähler
+    DREHSTROMZAEHLER = "DREHSTROMZAEHLER"  #: Drehstromzähler
+    BALGENGASZAEHLER = "BALGENGASZAEHLER"  #: Balgengaszähler
+    DREHKOLBENZAEHLER = "DREHKOLBENZAEHLER"  #: Drehkolbengaszähler
+    SMARTMETER = "SMARTMETER"  #: Smart Meter Zähler
+    LEISTUNGSZAEHLER = "LEISTUNGSZAEHLER"  #: leistungsmessender Zähler
+    MAXIMUMZAEHLER = "MAXIMUMZAEHLER"  #: Maximumzähler
+    TURBINENRADGASZAEHLER = "TURBINENRADGASZAEHLER"  #: Turbinenradgaszähler
+    ULTRASCHALLGASZAEHLER = "ULTRASCHALLGASZAEHLER"  #: Ultraschallgaszähler
+    WECHSELSTROMZAEHLER = "WECHSELSTROMZAEHLER"  #: Wechselstromzähler
diff --git a/src/bo4e/enum/zeiteinheit.py b/src/bo4e/enum/zeiteinheit.py
index 8adb68449..7a036e776 100644
--- a/src/bo4e/enum/zeiteinheit.py
+++ b/src/bo4e/enum/zeiteinheit.py
@@ -8,13 +8,13 @@ class Zeiteinheit(StrEnum):
     Auflistung möglicher Einheiten zur Verwendung in zeitbezogenen Angaben.
     """
 
-    SEKUNDE = "SEKUNDE"  # Sekunde
-    MINUTE = "MINUTE"  # Minute
-    STUNDE = "STUNDE"  # Stunde
-    VIERTEL_STUNDE = "VIERTEL_STUNDE"  # Viertelstunde
-    TAG = "TAG"  # Tag
-    WOCHE = "WOCHE"  # Woche
-    MONAT = "MONAT"  # Monat
-    QUARTAL = "QUARTAL"  # Quartal
-    HALBJAHR = "HALBJAHR"  # Halbjahr
-    JAHR = "JAHR"  # Jahr
+    SEKUNDE = "SEKUNDE"  #: Sekunde
+    MINUTE = "MINUTE"  #: Minute
+    STUNDE = "STUNDE"  #: Stunde
+    VIERTEL_STUNDE = "VIERTEL_STUNDE"  #: Viertelstunde
+    TAG = "TAG"  #: Tag
+    WOCHE = "WOCHE"  #: Woche
+    MONAT = "MONAT"  #: Monat
+    QUARTAL = "QUARTAL"  #: Quartal
+    HALBJAHR = "HALBJAHR"  #: Halbjahr
+    JAHR = "JAHR"  #: Jahr
diff --git a/tox.ini b/tox.ini
index 64287bad4..3cba024e0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -54,6 +54,7 @@ deps =
     {[testenv:linting]deps}
     {[testenv:type_check]deps}
     {[testenv:coverage]deps}
+    {[testenv:docs]deps}
     black==21.5b2
     # Replace by any tag/version: https://github.com/psf/black/tags
     # and change the pre-commit-config.yaml accordingly


Test patch:
diff --git a/tests/test_enums.py b/tests/test_enums.py
index 66bfe1db1..b33c0aeed 100644
--- a/tests/test_enums.py
+++ b/tests/test_enums.py
@@ -4,9 +4,7 @@
 from typing import List, Optional, TypeVar
 
 import pytest  # type:ignore[import]
-
 from bo4e.enum import anrede
-from bo4e.enum.anrede import Anrede
 from bo4e.enum.strenum import StrEnum
 
 
@@ -56,36 +54,3 @@ def test_enum_classes_docstrings(self):
             assert docstring is not None
             assert not TestEnums.starts_with_whitespace_pattern.match(docstring)
             assert not TestEnums.ends_with_whitespace_pattern.match(docstring)
-
-    @pytest.mark.parametrize(
-        "enum_member, expected_docstring",
-        [
-            pytest.param(Anrede.HERR, "Herr"),
-            pytest.param(Anrede.INDIVIDUELL, 'Individuell (z.B. "Profx")'),
-        ],
-    )
-    def test_enum_member_docstrings_explicitly(self, enum_member: TEnum, expected_docstring: Optional[str]):
-        """
-        Test the docstrings of the enum members explicitly.
-        if the general approach (using DocumentedStrEnum) works for single members, it will also work for all enums,
-        which are constructed similarly.
-        """
-        assert inspect.getdoc(enum_member) == expected_docstring
-
-    def test_enum_members_are_all_documented(self):
-        """
-        The class docstrings are enforced using pylint but the docstrings of enum members are not covered by pylint.
-        """
-        all_enums = self._get_all_enum_classes()
-        for enum_class in all_enums:
-            class_docstring = TestEnums._get_class_doc(enum_class)
-            for enum_member in enum_class:
-                member_docstring = inspect.getdoc(enum_member)
-                assert (
-                    member_docstring != class_docstring
-                ), f"Docstring of Enum member {enum_member} must not be the same as the class docstring"
-                assert member_docstring is not None
-                assert member_docstring != ""
-                assert not TestEnums.starts_with_whitespace_pattern.match(member_docstring)
-                assert not TestEnums.ends_with_whitespace_pattern.match(member_docstring)
-            break  # proof this works just for the wip anrede