fundamend


Namefundamend JSON
Version 0.7.0 PyPI version JSON
download
home_pageNone
SummaryXML basierte Formate und DatemModelle für die Energiewirtschaft in Deutschland
upload_time2024-12-05 18:27:21
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseMIT
keywords ahb bdew mig marktkommunikation xml
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
![Python Versions (officially) supported](https://img.shields.io/pypi/pyversions/fundamend.svg)
![Pypi status badge](https://img.shields.io/pypi/v/fundamend)
![Unittests status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Unittests/badge.svg)
![Coverage status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Coverage/badge.svg)
![Linting status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Linting/badge.svg)
![Black status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Formatting/badge.svg)

## 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](https://github.com/Hochfrequenz/migmose) und [kohlrahbi](https://github.com/Hochfrequenz/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:
```bash
pip install fundamend
```

### Message Implementation Guides (MIG) deserialisieren
```python
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
```python
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](unittests).

### Verwendung mit Pydantic
Per default verwendet fundamend die [dataclasses aus der Python-Standardlibrary](https://docs.python.org/3/library/dataclasses.html).
Es lässt sich aber auch direkt mit [Pydantic](https://docs.pydantic.dev/latest/) und den [Pydantic dataclasses](https://docs.pydantic.dev/2.7/concepts/dataclasses/) verwenden.
Wenn entweder pydantic schon installiert ist, oder mittels
```bash
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:
```python
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:
```json
{
  "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
```bash
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:
```bash
(myvenv): xml2json --xml-path path/to/mig.xml
```
erzeugt `path/to/mig.json`. Und
```bash
(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`](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](https://www.hochfrequenz.de) 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](https://www.hochfrequenz.de/index.php/karriere/aktuelle-stellenausschreibungen/full-stack-entwickler).

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "fundamend",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "AHB, BDEW, MIG, Marktkommunikation, XML",
    "author": null,
    "author_email": "Hochfrequenz Unternehmensberatung GmbH <info+github@hochfrequenz.de>",
    "download_url": "https://files.pythonhosted.org/packages/30/01/cad673375e0f0b1687effbb34da092ed61fda9312e5e689cdae71370f224/fundamend-0.7.0.tar.gz",
    "platform": null,
    "description": "# FUNDAMEND - Formate und DAtenModelle f\u00fcr die ENergiewirtschaft in Deutschland\n\nDieses Repository enth\u00e4lt das Python-Paket `fundamend`, das XML-basierte MIGs und AHBs als Python-Objekte einliest.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n![Python Versions (officially) supported](https://img.shields.io/pypi/pyversions/fundamend.svg)\n![Pypi status badge](https://img.shields.io/pypi/v/fundamend)\n![Unittests status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Unittests/badge.svg)\n![Coverage status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Coverage/badge.svg)\n![Linting status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Linting/badge.svg)\n![Black status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Formatting/badge.svg)\n\n## Sinn und Zweck\nSeit 2024 bietet der BDEW (endlich) maschinenlesbare MIG- und AHB-Spezifikationen an, wo zuvor nur PDF oder Word-Dateien ver\u00f6ffentlicht wurden.\nDas ist ein wichtiger Schritt f\u00fcr eine echte Digitalisierung der Marktkommunikation im deutschen Energiemarkt.\n\nDie nun maschinenlesbaren Informationen \u00fcber den Aufbau von EDIFACT-Nachrichten sind XML-basiert.\n\nDieses Repository enth\u00e4lt ein kleines Python-Paket, das die XML-Dateien einliest und als vollst\u00e4ndig typisierte Python-Objekte zur Verf\u00fcgung stellt, damit sich niemand mit XML herumschlagen muss.\nDas ist alles.\n\nHochfrequenz stellt mit [migmose](https://github.com/Hochfrequenz/migmose) und [kohlrahbi](https://github.com/Hochfrequenz/kohlrahbi) auch Tools bereit, um maschinenlesbare MIGs bzw. AHBs aus `.docx`-Dateien zu scrapen.\n\n## Installation und Verwendung\nDas Paket ist auf PyPI verf\u00fcgbar und kann mit pip installiert werden:\n```bash\npip install fundamend\n```\n\n### Message Implementation Guides (MIG) deserialisieren\n```python\nfrom pathlib import Path\nfrom fundamend import MigReader, MessageImplementationGuide\n\n# Angenommen, mig_utilts.xml enth\u00e4lt:\n# <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n# <M_UTILTS Versionsnummer=\"1.1c\"\n#    Veroeffentlichungsdatum=\"24.10.2023\"\n#    Author=\"BDEW\">\n# ...\n# </M_UTILTS>\n\nreader = MigReader(Path(\"pfad/zur/mig_utils.xml\"))\nmig = reader.read()\nassert isinstance(mig, MessageImplementationGuide)\nassert mig.format == \"UTILTS\"\n```\n\n### Anwendungshandbuch (AHB) deserialisieren\n```python\nfrom pathlib import Path\nfrom fundamend import AhbReader, Anwendungshandbuch\n\n# Angenommen, ahb_utilts.xml enth\u00e4lt:\n# <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n# <AHB Versionsnummer=\"1.1d\"\n#    Veroeffentlichungsdatum=\"02.04.2024\"\n#    Author=\"BDEW\">\n#    <AWF Pruefidentifikator=\"25001\" Beschreibung=\"Berechnungsformel\" Kommunikation_von=\"NB an MSB / LF\">\n#    ...\n#   </AWF>\n# </AHB>\n\nreader = AhbReader(Path(\"pfad/zur/ahb_utils.xml\"))\nahb = reader.read()\nassert isinstance(ahb, Anwendungshandbuch)\nassert {awf.pruefidentifikator for awf in ahb.anwendungsfaelle} == {\n    \"25001\",\n    \"25002\",\n    \"25003\",\n    \"25004\",\n    \"25005\",\n    \"25006\",\n    \"25007\",\n    \"25008\",\n    \"25009\",\n}\n```\n\nDie vollst\u00e4ndigen Beispiele finden sich in den [unittests](unittests).\n\n### Verwendung mit Pydantic\nPer default verwendet fundamend die [dataclasses aus der Python-Standardlibrary](https://docs.python.org/3/library/dataclasses.html).\nEs l\u00e4sst sich aber auch direkt mit [Pydantic](https://docs.pydantic.dev/latest/) und den [Pydantic dataclasses](https://docs.pydantic.dev/2.7/concepts/dataclasses/) verwenden.\nWenn entweder pydantic schon installiert ist, oder mittels\n```bash\npip install fundamend[pydantic]\n```\nmit installiert wird, dann sind Datenmodelle, die von `AhbReader` und `MigReader` zur\u00fcckgegeben werden, automatisch pydantic Objekte.\n\nMit Pydantic k\u00f6nnen die Ergebnisse auch leicht bspw. als JSON exportiert werden:\n```python\nfrom pathlib import Path\n\nfrom pydantic import RootModel\nfrom fundamend import Anwendungshandbuch, AhbReader\n\nahb = AhbReader(Path(\"UTILTS_AHB_1.1d_Konsultationsfassung_2024_04_02.xml\")).read()\nahb_json = RootModel[Anwendungshandbuch](ahb).model_dump(mode=\"json\")\n```\n\nDas Ergebnis sieht dann so aus:\n```json\n{\n  \"veroeffentlichungsdatum\": \"2024-04-02\",\n  \"autor\": \"BDEW\",\n  \"versionsnummer\": \"1.1d\",\n  \"anwendungsfaelle\": [\n    {\n      \"pruefidentifikator\": \"25001\",\n      \"beschreibung\": \"Berechnungsformel\",\n      \"kommunikation_von\": \"NB an MSB / LF\",\n      \"format\": \"UTILTS\",\n      \"segments\": [\n        {\n          \"id\": \"UNH\",\n          \"name\": \"Nachrichten-Kopfsegment\",\n          \"number\": \"00001\",\n          \"ahb_status\": \"Muss\",\n          \"data_elements\": [\n            {\n              \"id\": \"D_0062\",\n              \"name\": \"Nachrichten-Referenznummer\",\n              \"codes\": []\n            },\n```\n### CLI Tool f\u00fcr XML\u27a1\ufe0fJSON Konvertierung\nMit\n```bash\npip install fundamend[cli]\n```\nKann ein CLI-Tool in der entsprechenden venv installiert werden, das einzelne MIG- und AHB-XML-Dateien in entsprechende JSONs konvertiert:\n```bash\n(myvenv): xml2json --xml-path path/to/mig.xml\n```\nerzeugt `path/to/mig.json`. Und\n```bash\n(myvenv): xml2json --xml-path path/to/my/directory\n```\nkonvertiert alle XML-Dateien im entsprechenden Verzeichnis.\n\n### JSON Schemas\nDas fundamend Datenmodell ist auch als JSON Schema verf\u00fcgbar: [`json_schemas`](json_schemas).\n\n## Verwendung und Mitwirken\nDer Code ist MIT-lizenziert und kann daher frei verwendet werden.\nWir freuen uns \u00fcber Pull Requests an den main-Branch dieses Repositories.\n\n## Hochfrequenz\nDie [Hochfrequenz Unternehmensberatung GmbH](https://www.hochfrequenz.de) ist eine Beratung f\u00fcr Energieversorger im deutschsprachigen Raum.\nWir arbeiten gr\u00f6\u00dftenteils remote, haben aber auch B\u00fcros in Berlin, Bremen, Leipzig, K\u00f6ln und Gr\u00fcnwald und attraktive [Stellenangebote](https://www.hochfrequenz.de/index.php/karriere/aktuelle-stellenausschreibungen/full-stack-entwickler).\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "XML basierte Formate und DatemModelle f\u00fcr die Energiewirtschaft in Deutschland",
    "version": "0.7.0",
    "project_urls": {
        "Changelog": "https://github.com/Hochfrequenz/xml-fundamend-python/releases",
        "Homepage": "https://github.com/Hochfrequenz/xml-fundamend-python"
    },
    "split_keywords": [
        "ahb",
        " bdew",
        " mig",
        " marktkommunikation",
        " xml"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5ce80dba821ab0d6a30037bff2431acc436c3dda6a906ec0a9a3f7158d9dacf2",
                "md5": "5b8d4fced24754bdb89e07f0e387d086",
                "sha256": "ee17d6eaf6b2dfc668ed8694ab9dbe26caeca0bf45d592b3283b261178c417d7"
            },
            "downloads": -1,
            "filename": "fundamend-0.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5b8d4fced24754bdb89e07f0e387d086",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 16679,
            "upload_time": "2024-12-05T18:27:19",
            "upload_time_iso_8601": "2024-12-05T18:27:19.466981Z",
            "url": "https://files.pythonhosted.org/packages/5c/e8/0dba821ab0d6a30037bff2431acc436c3dda6a906ec0a9a3f7158d9dacf2/fundamend-0.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3001cad673375e0f0b1687effbb34da092ed61fda9312e5e689cdae71370f224",
                "md5": "092b2d64f6afdecf6fc24d9e46ca5593",
                "sha256": "1d05bf4e7d25493df846ec8a7ffabca33f9dca64d9a509d71cd198456e0c875e"
            },
            "downloads": -1,
            "filename": "fundamend-0.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "092b2d64f6afdecf6fc24d9e46ca5593",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 20139,
            "upload_time": "2024-12-05T18:27:21",
            "upload_time_iso_8601": "2024-12-05T18:27:21.304974Z",
            "url": "https://files.pythonhosted.org/packages/30/01/cad673375e0f0b1687effbb34da092ed61fda9312e5e689cdae71370f224/fundamend-0.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-05 18:27:21",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Hochfrequenz",
    "github_project": "xml-fundamend-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "fundamend"
}
        
Elapsed time: 0.42468s