Skip to main content

XML basierte Formate und DatemModelle für die Energiewirtschaft in Deutschland

Project description

FUNDAMEND - Formate und DAtenModelle für die ENergiewirtschaft in Deutschland

Dieses Repository enthält das Python-Paket fundamend, das XML-basierte MIGs und AHBs als Python-Objekte einliest.

License: MIT Python Versions (officially) supported Pypi status badge Unittests status badge Coverage status badge Linting status badge Black status badge

Sinn und Zweck

Seit 2024 bietet der BDEW (endlich) maschinenlesbare MIG- und AHB-Spezifikationen an, wo zuvor nur PDF oder Word-Dateien veröffentlicht wurden. Das ist ein wichtiger Schritt für eine echte Digitalisierung der Marktkommunikation im deutschen Energiemarkt.

Die nun maschinenlesbaren Informationen über den Aufbau von EDIFACT-Nachrichten sind XML-basiert.

Dieses Repository enthält ein kleines Python-Paket, das die XML-Dateien einliest und als vollständig typisierte Python-Objekte zur Verfügung stellt, damit sich niemand mit XML herumschlagen muss. Das ist alles.

Hochfrequenz stellt mit migmose und kohlrahbi auch Tools bereit, um maschinenlesbare MIGs bzw. AHBs aus .docx-Dateien zu scrapen.

Installation und Verwendung

Das Paket ist auf PyPI verfügbar und kann mit pip installiert werden:

pip install fundamend

Message Implementation Guides (MIG) deserialisieren

from pathlib import Path
from fundamend import MigReader, MessageImplementationGuide

# Angenommen, mig_utilts.xml enthält:
# <?xml version="1.0" encoding="UTF-8"?>
# <M_UTILTS Versionsnummer="1.1c"
#    Veroeffentlichungsdatum="24.10.2023"
#    Author="BDEW">
# ...
# </M_UTILTS>

reader = MigReader(Path("pfad/zur/mig_utils.xml"))
mig = reader.read()
assert isinstance(mig, MessageImplementationGuide)
assert mig.format == "UTILTS"

Anwendungshandbuch (AHB) deserialisieren

from pathlib import Path
from fundamend import AhbReader, Anwendungshandbuch

# Angenommen, ahb_utilts.xml enthält:
# <?xml version="1.0" encoding="UTF-8"?>
# <AHB Versionsnummer="1.1d"
#    Veroeffentlichungsdatum="02.04.2024"
#    Author="BDEW">
#    <AWF Pruefidentifikator="25001" Beschreibung="Berechnungsformel" Kommunikation_von="NB an MSB / LF">
#    ...
#   </AWF>
# </AHB>

reader = AhbReader(Path("pfad/zur/ahb_utils.xml"))
ahb = reader.read()
assert isinstance(ahb, Anwendungshandbuch)
assert {awf.pruefidentifikator for awf in ahb.anwendungsfaelle} == {
    "25001",
    "25002",
    "25003",
    "25004",
    "25005",
    "25006",
    "25007",
    "25008",
    "25009",
}

Die vollständigen Beispiele finden sich in den unittests:

Pydantic

Die Datenmodelle, die von AhbReader und MigReader zurückgegeben werden, sind pydantic Objekte.

Mit Pydantic können die Ergebnisse auch leicht bspw. als JSON exportiert werden (was auch über ein CLI-Tool im nächsten Abschnitt) noch einfacher möglich ist.

from pathlib import Path

from pydantic import RootModel
from fundamend import Anwendungshandbuch, AhbReader

ahb = AhbReader(Path("UTILTS_AHB_1.1d_Konsultationsfassung_2024_04_02.xml")).read()
ahb_json = RootModel[Anwendungshandbuch](ahb).model_dump(mode="json")

Das Ergebnis sieht dann so aus:

{
  "veroeffentlichungsdatum": "2024-04-02",
  "autor": "BDEW",
  "versionsnummer": "1.1d",
  "anwendungsfaelle": [
    {
      "pruefidentifikator": "25001",
      "beschreibung": "Berechnungsformel",
      "kommunikation_von": "NB an MSB / LF",
      "format": "UTILTS",
      "segments": [
        {
          "id": "UNH",
          "name": "Nachrichten-Kopfsegment",
          "number": "00001",
          "ahb_status": "Muss",
          "data_elements": [
            {
              "id": "D_0062",
              "name": "Nachrichten-Referenznummer",
              "codes": []
            },

CLI Tool für XML➡️JSON Konvertierung

Mit

pip install fundamend[cli]

Kann ein CLI-Tool in der entsprechenden venv installiert werden, das einzelne MIG- und AHB-XML-Dateien in entsprechende JSONs konvertiert:

(myvenv): xml2json --xml-path path/to/mig.xml

erzeugt path/to/mig.json. Und

(myvenv): xml2json --xml-path path/to/my/directory

konvertiert alle XML-Dateien im entsprechenden Verzeichnis.

JSON Schemas

Das fundamend Datenmodell ist auch als JSON Schema verfügbar: json_schemas.

Verwendung und Mitwirken

Der Code ist MIT-lizenziert und kann daher frei verwendet werden. Wir freuen uns über Pull Requests an den main-Branch dieses Repositories.

Hochfrequenz

Die Hochfrequenz Unternehmensberatung GmbH ist eine Beratung für Energieversorger im deutschsprachigen Raum. Wir arbeiten größtenteils remote, haben aber auch Büros in Berlin, Bremen, Leipzig, Köln und Grünwald und attraktive Stellenangebote.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fundamend-0.9.1.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fundamend-0.9.1-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file fundamend-0.9.1.tar.gz.

File metadata

  • Download URL: fundamend-0.9.1.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for fundamend-0.9.1.tar.gz
Algorithm Hash digest
SHA256 998409dfef0e2e27b2f3fb69e3631936cb63e53ab715d8aa063a9775d794be54
MD5 0758649cf8ffb966cbe613f6a56a878e
BLAKE2b-256 a3d22df42ae54a6f87e8d8a38529aa5c47eae7a2b741173efd21223324cb5818

See more details on using hashes here.

Provenance

The following attestation bundles were made for fundamend-0.9.1.tar.gz:

Publisher: python-publish.yml on Hochfrequenz/xml-fundamend-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fundamend-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: fundamend-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for fundamend-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e7b7e5e922a6ec2715deeef6ba3657715ade78b0bec93f16c387df59d4cffd62
MD5 9efc0c5e405a14cc31a2c66f015ccb7c
BLAKE2b-256 50828d00c868f120f29d41d8d5d615d73f07188aa8008bf5f35f4fdfedb48c63

See more details on using hashes here.

Provenance

The following attestation bundles were made for fundamend-0.9.1-py3-none-any.whl:

Publisher: python-publish.yml on Hochfrequenz/xml-fundamend-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page