fundamend


Namefundamend JSON
Version 0.3.1 PyPI version JSON
download
home_pageNone
SummaryXML basierte Formate und DatemModelle für die Energiewirtschaft in Deutschland
upload_time2024-05-31 06:43:22
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": []
            },
```

### 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/61/b8/86ed7df7b9f25674cfb1bc7b8c18db34789b204446372f7066aceb866e9e/fundamend-0.3.1.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\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.3.1",
    "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": "1005ed217aeb49518f4f26c10386cdeb0d300d61ea40eac5e1091f54d1fc7f6b",
                "md5": "3d995aa6468f2a728c55b125788cc3e8",
                "sha256": "1574a8ab2319b4ef47bd27a9fdb2b81a78e2a6ac225e6e6c7de9754405952317"
            },
            "downloads": -1,
            "filename": "fundamend-0.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3d995aa6468f2a728c55b125788cc3e8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 14580,
            "upload_time": "2024-05-31T06:43:20",
            "upload_time_iso_8601": "2024-05-31T06:43:20.266811Z",
            "url": "https://files.pythonhosted.org/packages/10/05/ed217aeb49518f4f26c10386cdeb0d300d61ea40eac5e1091f54d1fc7f6b/fundamend-0.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "61b886ed7df7b9f25674cfb1bc7b8c18db34789b204446372f7066aceb866e9e",
                "md5": "01cd07aeff3762181f6e824aec6e1fee",
                "sha256": "bd080dcc09577ab61ad2e6e5d40f777b24ad6389f22da16076ed5394eac882cd"
            },
            "downloads": -1,
            "filename": "fundamend-0.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "01cd07aeff3762181f6e824aec6e1fee",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 19799,
            "upload_time": "2024-05-31T06:43:22",
            "upload_time_iso_8601": "2024-05-31T06:43:22.639812Z",
            "url": "https://files.pythonhosted.org/packages/61/b8/86ed7df7b9f25674cfb1bc7b8c18db34789b204446372f7066aceb866e9e/fundamend-0.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-31 06:43:22",
    "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.27714s