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.
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.
Verwendung mit Pydantic
Per default verwendet fundamend die dataclasses aus der Python-Standardlibrary. Es lässt sich aber auch direkt mit Pydantic und den Pydantic dataclasses verwenden. Wenn entweder pydantic schon installiert ist, oder mittels
pip install fundamend[pydantic]
mit installiert wird, dann sind Datenmodelle, die von AhbReader und MigReader zurückgegeben werden, automatisch pydantic Objekte.
Mit Pydantic können die Ergebnisse auch leicht bspw. als JSON exportiert werden:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fundamend-0.5.1.tar.gz.
File metadata
- Download URL: fundamend-0.5.1.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e869b2cfcbc0468742884f034d7de4fd21bc84c0c1fa052bdf78fb5bf23bdf0
|
|
| MD5 |
92eb039f89da0f359d5595471fe1acd5
|
|
| BLAKE2b-256 |
f2047157f3197bd6bba9a89b0880a71ac7cd0a2c65973320862d139ae01ecb9f
|
Provenance
The following attestation bundles were made for fundamend-0.5.1.tar.gz:
Publisher:
python-publish.yml on Hochfrequenz/xml-fundamend-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fundamend-0.5.1.tar.gz -
Subject digest:
8e869b2cfcbc0468742884f034d7de4fd21bc84c0c1fa052bdf78fb5bf23bdf0 - Sigstore transparency entry: 153619195
- Sigstore integration time:
-
Permalink:
Hochfrequenz/xml-fundamend-python@7226526c3ea22b19fa207241c3eb4939065d8064 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/Hochfrequenz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@7226526c3ea22b19fa207241c3eb4939065d8064 -
Trigger Event:
release
-
Statement type:
File details
Details for the file fundamend-0.5.1-py3-none-any.whl.
File metadata
- Download URL: fundamend-0.5.1-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba5fc8d49958f209f40cd28b1a3f9fa1d99f7cf533920a967900268f7997bf69
|
|
| MD5 |
9d100f94dae092829e427f83b6f3a887
|
|
| BLAKE2b-256 |
1ee2e280e01569e9957c8f345f9cb474f109ba17e071406c98f0b90a706a68ee
|
Provenance
The following attestation bundles were made for fundamend-0.5.1-py3-none-any.whl:
Publisher:
python-publish.yml on Hochfrequenz/xml-fundamend-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fundamend-0.5.1-py3-none-any.whl -
Subject digest:
ba5fc8d49958f209f40cd28b1a3f9fa1d99f7cf533920a967900268f7997bf69 - Sigstore transparency entry: 153619198
- Sigstore integration time:
-
Permalink:
Hochfrequenz/xml-fundamend-python@7226526c3ea22b19fa207241c3eb4939065d8064 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/Hochfrequenz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@7226526c3ea22b19fa207241c3eb4939065d8064 -
Trigger Event:
release
-
Statement type: