diff --git a/.gitignore b/.gitignore
index fb33be7..8d3d30d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -133,4 +133,6 @@ dmypy.json
# vscode settings
.vscode/
-src/_your_package_version.py
+src/_bo4e_python_generator_version.py
+
+unittests/output
diff --git a/dev_requirements/requirements-linting.txt b/dev_requirements/requirements-linting.txt
index 79074ec..eeeef6c 100644
--- a/dev_requirements/requirements-linting.txt
+++ b/dev_requirements/requirements-linting.txt
@@ -4,7 +4,7 @@
#
# pip-compile requirements-linting.in
#
-astroid==3.0.0
+astroid==3.0.1
# via pylint
dill==0.3.7
# via pylint
@@ -12,9 +12,9 @@ isort==5.12.0
# via pylint
mccabe==0.7.0
# via pylint
-platformdirs==3.1.0
+platformdirs==3.11.0
# via pylint
-pylint==3.0.1
+pylint==3.0.2
# via -r dev_requirements/requirements-linting.in
-tomlkit==0.11.6
+tomlkit==0.12.2
# via pylint
diff --git a/dev_requirements/requirements-tests.txt b/dev_requirements/requirements-tests.txt
index 81bd952..072f6e8 100644
--- a/dev_requirements/requirements-tests.txt
+++ b/dev_requirements/requirements-tests.txt
@@ -8,9 +8,9 @@ exceptiongroup==1.1.3
# via pytest
iniconfig==2.0.0
# via pytest
-packaging==23.0
+packaging==23.2
# via pytest
-pluggy==1.0.0
+pluggy==1.3.0
# via pytest
pytest==7.4.3
# via -r dev_requirements/requirements-tests.in
diff --git a/dev_requirements/requirements-type_check.txt b/dev_requirements/requirements-type_check.txt
index 3db3d9c..b74d405 100644
--- a/dev_requirements/requirements-type_check.txt
+++ b/dev_requirements/requirements-type_check.txt
@@ -4,9 +4,9 @@
#
# pip-compile requirements-type_check.in
#
-mypy==1.6.0
+mypy==1.6.1
# via -r dev_requirements/requirements-type_check.in
mypy-extensions==1.0.0
# via mypy
-typing-extensions==4.7.1
+typing-extensions==4.8.0
# via mypy
diff --git a/pyproject.toml b/pyproject.toml
index 0d13591..cc03a5d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,10 +1,10 @@
[project]
-name = "your-favourite-package-name"
-description = "Description of your package"
+name = "BO4E-Python-Generator"
+description = "This tool auto generates (customizable) pydantic v2 Code to implement the BO4E-Schemas."
license = { text = "MIT" }
requires-python = ">=3.11"
-authors = [{ name = "your name", email = "your@email.address" }]
-keywords = ["your", "important", "keywords"]
+authors = [{ name = "Hochfrequenz Unternehmensberatung GmbH", email = "info@hochfrequenz.de" }]
+keywords = ["bo4e", "code-generator"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
@@ -16,13 +16,19 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
-dependencies = [] # add all the dependencies from requirements.in here, too
+dependencies = [
+ "datamodel-code-generator",
+ "click",
+] # add all the dependencies from requirements.in here, too
dynamic = ["readme", "version"]
[project.urls]
Changelog = "https://github.com/Hochfrequenz/python_template_repository/releases"
Homepage = "https://github.com/Hochfrequenz/python_template_repository"
+[project.scripts]
+bo4e-generator = "bo4e_generator.__main__:main"
+
[tool.black]
line-length = 120
@@ -30,6 +36,11 @@ line-length = 120
line_length = 120
profile = "black"
+[tool.pylint]
+disable = [
+ "R0903", # disable too-few-public-methods
+]
+
[tool.pylint."MESSAGES CONTROL"]
max-line-length = 120
@@ -47,7 +58,7 @@ fragments = [{ path = "README.md" }]
source = "vcs"
[tool.hatch.build.hooks.vcs]
-version-file = "src/_your_package_version.py"
+version-file = "src/_bo4e_generator_version.py"
template = '''
version = "{version}"
'''
@@ -57,4 +68,4 @@ exclude = ["/unittests"]
[tool.hatch.build.targets.wheel]
only-include = ["src"]
-sources = ["src"]
\ No newline at end of file
+sources = ["src"]
diff --git a/requirements.in b/requirements.in
index e69de29..00dc8a5 100644
--- a/requirements.in
+++ b/requirements.in
@@ -0,0 +1,2 @@
+datamodel-code-generator
+click
diff --git a/requirements.txt b/requirements.txt
index cf3204d..0fa9456 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,108 @@
#
-# This file is autogenerated by pip-compile with python 3.10
-# To update, run:
+# This file is autogenerated by pip-compile with Python 3.11
+# by the following command:
#
-# pip-compile requirements.in
+# pip-compile '.\requirements.in'
#
+annotated-types==0.6.0
+ # via pydantic
+argcomplete==3.1.2
+ # via datamodel-code-generator
+attrs==23.1.0
+ # via jsonschema
+black==23.9.1
+ # via datamodel-code-generator
+certifi==2023.7.22
+ # via requests
+chardet==5.2.0
+ # via prance
+charset-normalizer==3.3.0
+ # via requests
+click==8.1.7
+ # via
+ # -r .\requirements.in
+ # black
+colorama==0.4.6
+ # via click
+datamodel-code-generator==0.22.1
+ # via -r .\requirements.in
+dnspython==2.4.2
+ # via email-validator
+email-validator==2.0.0.post2
+ # via pydantic
+genson==1.2.2
+ # via datamodel-code-generator
+idna==3.4
+ # via
+ # email-validator
+ # requests
+inflect==5.6.2
+ # via datamodel-code-generator
+isort==5.12.0
+ # via datamodel-code-generator
+jinja2==3.1.2
+ # via datamodel-code-generator
+jsonschema==4.17.3
+ # via
+ # jsonschema-spec
+ # openapi-schema-validator
+ # openapi-spec-validator
+jsonschema-spec==0.1.6
+ # via openapi-spec-validator
+lazy-object-proxy==1.9.0
+ # via openapi-spec-validator
+markupsafe==2.1.3
+ # via jinja2
+mypy-extensions==1.0.0
+ # via black
+openapi-schema-validator==0.4.4
+ # via openapi-spec-validator
+openapi-spec-validator==0.5.7
+ # via datamodel-code-generator
+packaging==23.2
+ # via
+ # black
+ # datamodel-code-generator
+ # prance
+pathable==0.4.3
+ # via jsonschema-spec
+pathspec==0.11.2
+ # via black
+platformdirs==3.11.0
+ # via black
+prance==23.6.21.0
+ # via datamodel-code-generator
+pydantic[email]==2.4.2
+ # via
+ # datamodel-code-generator
+ # pydantic
+pydantic-core==2.10.1
+ # via pydantic
+pyrsistent==0.19.3
+ # via jsonschema
+pysnooper==1.2.0
+ # via datamodel-code-generator
+pyyaml==6.0.1
+ # via jsonschema-spec
+requests==2.31.0
+ # via
+ # jsonschema-spec
+ # prance
+rfc3339-validator==0.1.4
+ # via openapi-schema-validator
+ruamel-yaml==0.17.35
+ # via prance
+ruamel-yaml-clib==0.2.8
+ # via ruamel-yaml
+six==1.16.0
+ # via
+ # prance
+ # rfc3339-validator
+toml==0.10.2
+ # via datamodel-code-generator
+typing-extensions==4.8.0
+ # via
+ # pydantic
+ # pydantic-core
+urllib3==2.0.6
+ # via requests
diff --git a/src/bo4e_generator/__init__.py b/src/bo4e_generator/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/bo4e_generator/__main__.py b/src/bo4e_generator/__main__.py
new file mode 100644
index 0000000..d502dbc
--- /dev/null
+++ b/src/bo4e_generator/__main__.py
@@ -0,0 +1,51 @@
+"""
+This module is the entry point for the CLI bo4e-generator.
+"""
+from pathlib import Path
+
+import click
+
+from bo4e_generator.parser import create_init_files, generate_bo4e_schema
+from bo4e_generator.schema import get_namespace
+
+
+def generate_bo4e_schemas(input_directory: Path, output_directory: Path):
+ """
+ Generate all BO4E schemas from the given input directory and save them in the given output directory.
+ """
+ namespace = get_namespace(input_directory, output_directory)
+ for schema_metadata in namespace.values():
+ result = generate_bo4e_schema(schema_metadata, namespace)
+ schema_metadata.save(result)
+ print(f"Generated {schema_metadata}")
+ create_init_files(output_directory)
+ print(f"Generated __init__.py files in {output_directory}")
+
+
+@click.command()
+@click.option(
+ "--input-dir",
+ "-i",
+ type=click.Path(exists=True, file_okay=False, path_type=Path),
+ help="Input directory which contains the JSON schemas.",
+ required=True,
+)
+@click.option(
+ "--output-dir",
+ "-o",
+ type=click.Path(exists=False, file_okay=False, path_type=Path),
+ help="Output directory for the generated python files.",
+ required=True,
+)
+@click.help_option()
+@click.version_option(package_name="BO4E-Python-Generator")
+def main(input_dir: Path, output_dir: Path):
+ """
+ CLI entry point for the bo4e-generator.
+ """
+ generate_bo4e_schemas(input_dir, output_dir)
+
+
+if __name__ == "__main__":
+ # pylint: disable=no-value-for-parameter
+ main()
diff --git a/src/bo4e_generator/parser.py b/src/bo4e_generator/parser.py
new file mode 100644
index 0000000..198a5e5
--- /dev/null
+++ b/src/bo4e_generator/parser.py
@@ -0,0 +1,245 @@
+"""
+Contains code to generate pydantic v2 models from json schemas.
+Since the used tool doesn't support all features we need, we monkey patch some functions.
+"""
+import re
+from keyword import iskeyword
+from pathlib import Path
+from typing import Optional, Set, Tuple
+
+import datamodel_code_generator.parser.base
+import datamodel_code_generator.reference
+from datamodel_code_generator import DataModelType, PythonVersion
+from datamodel_code_generator.model import DataModelSet, get_data_model_types
+from datamodel_code_generator.model.enum import Enum as _Enum
+from datamodel_code_generator.parser.jsonschema import JsonSchemaParser
+from datamodel_code_generator.reference import camel_to_snake, snake_to_upper_camel
+
+from bo4e_generator.schema import SchemaMetadata
+
+
+def get_bo4e_data_model_types(
+ data_model_type: DataModelType,
+ target_python_version: PythonVersion,
+ namespace: dict[str, SchemaMetadata],
+ monkey_patch_enum_type: bool = True,
+) -> DataModelSet:
+ """
+ Get the data model types for the data model parser.
+ In the first place, it overrides functions such that the namespace of the bo4e-package will be recreated instead of
+ "put everything in one file".
+ """
+ data_model_types = get_data_model_types(data_model_type, target_python_version=target_python_version)
+
+ @property # type: ignore[misc]
+ # "property" used with a non-method
+ def _module_path(self) -> list[str]:
+ if self.name not in namespace:
+ raise ValueError(f"Model not in namespace: {self.name}")
+ if self.file_path:
+ return [
+ *self.file_path.parts[:-1],
+ self.file_path.stem,
+ namespace[self.name].pkg,
+ namespace[self.name].module_name,
+ ]
+ return [namespace[self.name].pkg, namespace[self.name].module_name]
+
+ @property # type: ignore[misc]
+ # "property" used with a non-method
+ def _module_name(self) -> str:
+ return ".".join(self.module_path)
+
+ class BO4EDataModel(data_model_types.data_model): # type: ignore[name-defined]
+ # Name "data_model_types.data_model" is not defined
+ """Override the data model to use create the namespace."""
+
+ module_path = _module_path
+ module_name = _module_name
+
+ if monkey_patch_enum_type:
+ setattr(_Enum, "module_path", _module_path)
+ setattr(_Enum, "module_name", _module_name)
+
+ return DataModelSet(
+ data_model=BO4EDataModel,
+ root_model=data_model_types.root_model,
+ field_model=data_model_types.field_model,
+ data_type_manager=data_model_types.data_type_manager,
+ dump_resolve_reference_action=data_model_types.dump_resolve_reference_action,
+ known_third_party=data_model_types.known_third_party,
+ )
+
+
+def monkey_patch_field_name_resolver():
+ """
+ Function taken from datamodel_code_generator.reference.FieldNameResolver.
+ Related issue: https://github.com/koxudaxi/datamodel-code-generator/issues/1644
+ Related PR: https://github.com/koxudaxi/datamodel-code-generator/pull/1654
+ The current implementation struggles if you have enum values starting with invalid characters (e.g. numbers) but
+ want to be able to remove leading underscores from field names.
+ This monkey patch (dirty) fixes this issue.
+ """
+
+ # pylint: disable=too-many-branches
+ def _get_valid_name(
+ self,
+ name: str,
+ excludes: Optional[Set[str]] = None,
+ ignore_snake_case_field: bool = False,
+ upper_camel: bool = False,
+ ) -> str:
+ if not name:
+ name = self.empty_field_name
+ if name[0] == "#":
+ name = name[1:] or self.empty_field_name
+
+ if self.snake_case_field and not ignore_snake_case_field and self.original_delimiter is not None:
+ name = snake_to_upper_camel(name, delimiter=self.original_delimiter)
+
+ name = re.sub(r"[¹²³⁴⁵⁶⁷⁸⁹]|\W", "_", name)
+ if name[0].isnumeric():
+ name = f"{self.special_field_name_prefix}{name}" # Changed line by me
+
+ # We should avoid having a field begin with an underscore, as it
+ # causes pydantic to consider it as private
+ while name.startswith("_"):
+ if self.remove_special_field_name_prefix:
+ name = name[1:]
+ else:
+ name = f"{self.special_field_name_prefix}{name}"
+ break
+ if self.capitalise_enum_members or self.snake_case_field and not ignore_snake_case_field:
+ name = camel_to_snake(name)
+ count = 1
+ # pylint: disable=protected-access
+ if iskeyword(name) or not self._validate_field_name(name):
+ name += "_"
+ if upper_camel:
+ new_name = snake_to_upper_camel(name)
+ elif self.capitalise_enum_members:
+ new_name = name.upper()
+ else:
+ new_name = name
+ while (
+ not (new_name.isidentifier() or not self._validate_field_name(new_name))
+ or iskeyword(new_name)
+ or (excludes and new_name in excludes)
+ ):
+ new_name = f"{name}{count}" if upper_camel else f"{name}_{count}"
+ count += 1
+ return new_name
+
+ datamodel_code_generator.reference.FieldNameResolver.get_valid_name = _get_valid_name
+
+
+def monkey_patch_relative_import():
+ """
+ Function taken from datamodel_code_generator.parser.base.
+ This function is used to create the relative imports if a referenced model is used in the file.
+ Originally, this function would create something like "from ..enum import typ" and a field definition like
+ "typ: Annotated[typ.Typ | None, Field(alias='_typ')] = None".
+ This is in general a valid way to do it, but pydantic somehow doesn't like it. It will throw an error if you
+ attempt to import an enum this way. Looks something like "'Typ' has no attribute 'Typ'".
+ Anyway, this monkey patch changes the imports to "from ..enum.typ import Typ" which resolves the issue.
+ """
+
+ def relative(current_module: str, reference: str) -> Tuple[str, str]:
+ """Find relative module path."""
+
+ current_module_path = current_module.split(".") if current_module else []
+ *reference_path, name = reference.split(".")
+
+ if current_module_path == reference_path:
+ return "", ""
+
+ i = 0
+ for x, y in zip(current_module_path, reference_path):
+ if x != y:
+ break
+ i += 1
+
+ left = "." * (len(current_module_path) - i)
+ right = ".".join([*reference_path[i:], name])
+
+ if not left:
+ left = "."
+ if not right:
+ right = name
+ elif "." in right:
+ extra, right = right.rsplit(".", 1)
+ left += extra
+
+ return left, right
+
+ datamodel_code_generator.parser.base.relative = relative
+
+
+def create_init_files(output_path: Path) -> None:
+ """
+ Create __init__.py files in all subdirectories of the given output directory and in the directory itself.
+ """
+ (output_path / "__init__.py").touch()
+ for directory in output_path.glob("**/"):
+ (directory / "__init__.py").touch()
+
+
+def remove_future_import(python_code: str) -> str:
+ """
+ Remove the future import from the generated code.
+ """
+ return re.sub(r"from __future__ import annotations\n\n", "", python_code)
+
+
+def generate_bo4e_schema(schema_metadata: SchemaMetadata, namespace: dict[str, SchemaMetadata]) -> str:
+ """
+ Generate a pydantic v2 model from the given schema. Returns the resulting code as string.
+ """
+ data_model_types = get_bo4e_data_model_types(
+ DataModelType.PydanticV2BaseModel, target_python_version=PythonVersion.PY_311, namespace=namespace
+ )
+ monkey_patch_field_name_resolver()
+ monkey_patch_relative_import()
+
+ parser = JsonSchemaParser(
+ schema_metadata.schema_text,
+ data_model_type=data_model_types.data_model,
+ data_model_root_type=data_model_types.root_model,
+ data_model_field_type=data_model_types.field_model,
+ data_type_manager_type=data_model_types.data_type_manager,
+ dump_resolve_reference_action=data_model_types.dump_resolve_reference_action,
+ use_annotated=True,
+ use_double_quotes=True,
+ use_schema_description=True,
+ use_subclass_enum=True,
+ use_standard_collections=True,
+ use_union_operator=True,
+ set_default_enum_member=True,
+ snake_case_field=True,
+ field_constraints=True,
+ class_name=schema_metadata.class_name,
+ capitalise_enum_members=True,
+ base_path=schema_metadata.input_file.parent,
+ remove_special_field_name_prefix=True,
+ special_field_name_prefix="field_",
+ allow_extra_fields=False,
+ )
+ result = parser.parse()
+ if isinstance(result, dict):
+ if schema_metadata.module_name.startswith("_"):
+ # Because somehow the generator uses the prefix also on the module name. Don't know why.
+ module_path = (schema_metadata.pkg, f"field{schema_metadata.module_name}.py")
+ else:
+ module_path = (schema_metadata.pkg, f"{schema_metadata.module_name}.py")
+ try:
+ result = result[module_path].body
+ except KeyError as error:
+ raise KeyError(
+ f"Could not find module {'.'.join(module_path)} in results: "
+ f"{list(result.keys())}" # type: ignore[union-attr]
+ # Item "str" of "str | dict[tuple[str, ...], Result]" has no attribute "keys"
+ # Somehow, mypy is not good enough to understand the instance-check above
+ ) from error
+
+ result = remove_future_import(result)
+ return result
diff --git a/src/mypackage/py.typed b/src/bo4e_generator/py.typed
similarity index 100%
rename from src/mypackage/py.typed
rename to src/bo4e_generator/py.typed
diff --git a/src/bo4e_generator/schema.py b/src/bo4e_generator/schema.py
new file mode 100644
index 0000000..358f707
--- /dev/null
+++ b/src/bo4e_generator/schema.py
@@ -0,0 +1,69 @@
+"""
+This module contains functionality to retrieve information about the schemas.
+"""
+import json
+import re
+from pathlib import Path
+from typing import Any
+
+from pydantic import BaseModel
+
+SchemaType = dict[str, Any]
+
+
+class SchemaMetadata(BaseModel):
+ """
+ Metadata about a schema.
+ """
+
+ schema_text: str
+ schema_parsed: SchemaType
+ class_name: str
+ input_file: Path
+ pkg: str
+ "e.g. 'bo'"
+ output_file: Path
+ module_name: str
+ "e.g. 'preisblatt_netznutzung"
+
+ def save(self, content: str):
+ """
+ Save the content to the file defined by `output_file`. Creates parent directories if needed.
+ """
+ self.output_file.parent.mkdir(parents=True, exist_ok=True)
+ self.output_file.write_text(content)
+
+ def __str__(self):
+ return f"{self.pkg}.{self.class_name}"
+
+
+def camel_to_snake(name: str) -> str:
+ """
+ Convert a camel case string to snake case. Credit to https://stackoverflow.com/a/1176023/21303427
+ """
+ name = re.sub("([^_])([A-Z][a-z]+)", r"\1_\2", name)
+ return re.sub("([a-z0-9])([A-Z])", r"\1_\2", name).lower()
+
+
+def get_namespace(input_directory: Path, output_directory: Path) -> dict[str, SchemaMetadata]:
+ """
+ Create a namespace for the bo4e classes.
+ """
+
+ namespace: dict[str, SchemaMetadata] = {}
+ for file_path in input_directory.rglob("*.json"):
+ schema_text = file_path.read_text()
+ schema_parsed = json.loads(schema_text)
+ class_name = schema_parsed["title"].replace(" ", "_")
+ module_name = camel_to_snake(class_name)
+
+ namespace[class_name] = SchemaMetadata(
+ pkg=file_path.parent.name,
+ module_name=module_name,
+ input_file=file_path,
+ output_file=output_directory / file_path.relative_to(input_directory).with_name(f"{module_name}.py"),
+ schema_text=schema_text,
+ schema_parsed=schema_parsed,
+ class_name=class_name,
+ )
+ return namespace
diff --git a/src/mypackage/__init__.py b/src/mypackage/__init__.py
deleted file mode 100644
index c8dd36b..0000000
--- a/src/mypackage/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-"""
-src contains all your business logic
-"""
diff --git a/src/mypackage/mymodule.py b/src/mypackage/mymodule.py
deleted file mode 100644
index 2afc797..0000000
--- a/src/mypackage/mymodule.py
+++ /dev/null
@@ -1,23 +0,0 @@
-"""
-This a docstring for the module.
-"""
-
-
-class MyClass: # pylint: disable=too-few-public-methods
- """
- This is a docstring for the class.
- """
-
- def __init__(self):
- """
- Initialize for the sake of initializing
- """
- self.my_instance_var: str = "abc"
-
- def do_something(self) -> str:
- """
- Actually does nothing.
- :return: the value of an instance variable
- """
- # this is a super long line with: 100 < line length <= 120 to demonstrate the purpose of pyproject.toml
- return self.my_instance_var
diff --git a/tox.ini b/tox.ini
index 42737d0..b5ac525 100644
--- a/tox.ini
+++ b/tox.ini
@@ -26,7 +26,7 @@ deps =
# add your fixtures like e.g. pytest_datafiles here
setenv = PYTHONPATH = {toxinidir}/src
commands =
- pylint mypackage
+ pylint src/bo4e_generator
pylint unittests --rcfile=unittests/.pylintrc
# add single files (ending with .py) or packages here
@@ -37,7 +37,7 @@ deps =
-r requirements.txt
-r dev_requirements/requirements-type_check.txt
commands =
- mypy --show-error-codes src/mypackage
+ mypy --show-error-codes src/bo4e_generator
mypy --show-error-codes unittests
# add single files (ending with .py) or packages here
@@ -48,7 +48,7 @@ deps =
-r requirements.txt
-r dev_requirements/requirements-spell_check.txt
commands =
- codespell --ignore-words=domain-specific-terms.txt src/ibims
+ codespell --ignore-words=domain-specific-terms.txt src/bo4e_generator
codespell --ignore-words=domain-specific-terms.txt README.md
# add single files (ending with .py) or packages here
diff --git a/unittests/test_data/bo4e_schemas/bo/Angebot.json b/unittests/test_data/bo4e_schemas/bo/Angebot.json
new file mode 100644
index 0000000..2f10d7f
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Angebot.json
@@ -0,0 +1,178 @@
+{
+ "description": "Mit diesem BO kann ein Versorgungsangebot zur Strom- oder Gasversorgung oder die Teilnahme an einer Ausschreibung\nübertragen werden. Es können verschiedene Varianten enthalten sein (z.B. ein- und mehrjährige Laufzeit).\nInnerhalb jeder Variante können Teile enthalten sein, die jeweils für eine oder mehrere Marktlokationen erstellt\nwerden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Angebot JSON Schema `_",
+ "title": "Angebot",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "ANGEBOT",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anfragereferenz": {
+ "title": "Anfragereferenz",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "angebotsdatum": {
+ "title": "Angebotsdatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "angebotsgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "angebotsnehmer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "angebotsnummer": {
+ "title": "Angebotsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bindefrist": {
+ "title": "Bindefrist",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "unterzeichnerAngebotsgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Ansprechpartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "unterzeichnerAngebotsnehmer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Ansprechpartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "varianten": {
+ "title": "Varianten",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Angebotsvariante.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Ansprechpartner.json b/unittests/test_data/bo4e_schemas/bo/Ansprechpartner.json
new file mode 100644
index 0000000..99a94fc
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Ansprechpartner.json
@@ -0,0 +1,184 @@
+{
+ "description": "Object containing information about a Ansprechpartner\n\n.. raw:: html\n\n \n\n.. HINT::\n `Ansprechpartner JSON Schema `_",
+ "title": "Ansprechpartner",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "ANSPRECHPARTNER",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "adresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anrede": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Anrede.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "eMailAdresse": {
+ "title": "Emailadresse",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geschaeftspartner": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "individuelleAnrede": {
+ "title": "Individuelleanrede",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kommentar": {
+ "title": "Kommentar",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "nachname": {
+ "title": "Nachname",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rufnummer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Rufnummer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "titel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Titel.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vorname": {
+ "title": "Vorname",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zustaendigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zustaendigkeit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Ausschreibung.json b/unittests/test_data/bo4e_schemas/bo/Ausschreibung.json
new file mode 100644
index 0000000..b0df9b7
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Ausschreibung.json
@@ -0,0 +1,188 @@
+{
+ "description": "Das BO Ausschreibung dient zur detaillierten Darstellung von ausgeschriebenen Energiemengen in der Energiewirtschaft\n\n.. raw:: html\n\n \n\n.. HINT::\n `Ausschreibung JSON Schema `_",
+ "title": "Ausschreibung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "AUSSCHREIUNG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "abgabefrist": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ausschreibender": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ausschreibungportal": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Ausschreibungsportal.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ausschreibungsnummer": {
+ "title": "Ausschreibungsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ausschreibungsstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Ausschreibungsstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ausschreibungstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Ausschreibungstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bindefrist": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istKostenpflichtig": {
+ "title": "Istkostenpflichtig",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lose": {
+ "title": "Lose",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Ausschreibungslos.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "veroeffentlichungszeitpunkt": {
+ "title": "Veroeffentlichungszeitpunkt",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "webseite": {
+ "title": "Webseite",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Buendelvertrag.json b/unittests/test_data/bo4e_schemas/bo/Buendelvertrag.json
new file mode 100644
index 0000000..5d43a8f
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Buendelvertrag.json
@@ -0,0 +1,223 @@
+{
+ "description": "Abbildung eines Bündelvertrags.\nEs handelt sich hierbei um eine Liste von Einzelverträgen, die in einem Vertragsobjekt gebündelt sind.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Buendelvertrag JSON Schema `_",
+ "title": "Buendelvertrag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "BUENDELVERTRAG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einzelvertraege": {
+ "title": "Einzelvertraege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Vertrag.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "unterzeichnervp1": {
+ "title": "Unterzeichnervp1",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Unterschrift.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "unterzeichnervp2": {
+ "title": "Unterzeichnervp2",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Unterschrift.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Vertragsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsbeginn": {
+ "title": "Vertragsbeginn",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsende": {
+ "title": "Vertragsende",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "title": "Vertragskonditionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Vertragskonditionen.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsnummer": {
+ "title": "Vertragsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragspartner1": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragspartner2": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Vertragsstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Energiemenge.json b/unittests/test_data/bo4e_schemas/bo/Energiemenge.json
new file mode 100644
index 0000000..2138517
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Energiemenge.json
@@ -0,0 +1,96 @@
+{
+ "description": "Abbildung von Mengen, die Lokationen zugeordnet sind\n\n.. raw:: html\n\n \n\n.. HINT::\n `Energiemenge JSON Schema `_",
+ "title": "Energiemenge",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "ENERGIEMENGE",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energieverbrauch": {
+ "title": "Energieverbrauch",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Verbrauch.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationsId": {
+ "title": "Lokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Lokationstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Fremdkosten.json b/unittests/test_data/bo4e_schemas/bo/Fremdkosten.json
new file mode 100644
index 0000000..c0bc6dc
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Fremdkosten.json
@@ -0,0 +1,95 @@
+{
+ "description": "Mit diesem BO werden die Fremdkosten, beispielsweise für eine Angebotserstellung oder eine Rechnungsprüfung,\nübertragen.\nDie Fremdkosten enthalten dabei alle Kostenblöcke, die von anderen Marktteilnehmern oder Instanzen erhoben werden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Fremdkosten JSON Schema `_",
+ "title": "Fremdkosten",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "FREMDKOSTEN",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenbloecke": {
+ "title": "Kostenbloecke",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Fremdkostenblock.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "summeKosten": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Geraet.json b/unittests/test_data/bo4e_schemas/bo/Geraet.json
new file mode 100644
index 0000000..a79261d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Geraet.json
@@ -0,0 +1,104 @@
+{
+ "description": "Mit diesem BO werden alle Geräte modelliert, die keine Zähler sind.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Geraet JSON Schema `_",
+ "title": "Geraet",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "GERAET",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geraeteklasse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Geraeteklasse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geraetenummer": {
+ "title": "Geraetenummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geraetetyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Geraetetyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Geschaeftsobjekt.json b/unittests/test_data/bo4e_schemas/bo/Geschaeftsobjekt.json
new file mode 100644
index 0000000..12abe46
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Geschaeftsobjekt.json
@@ -0,0 +1,58 @@
+{
+ "description": "Das BO Geschäftsobjekt ist der Master für alle Geschäftsobjekte.\nAlle Attribute, die hier in diesem BO enthalten sind, werden an alle BOs vererbt.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Geschaeftsobjekt JSON Schema `_",
+ "title": "Geschaeftsobjekt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "GESCHAEFTSOBJEKT",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Geschaeftspartner.json b/unittests/test_data/bo4e_schemas/bo/Geschaeftspartner.json
new file mode 100644
index 0000000..6ce658d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Geschaeftspartner.json
@@ -0,0 +1,230 @@
+{
+ "description": "Mit diesem Objekt können Geschäftspartner übertragen werden.\nSowohl Unternehmen, als auch Privatpersonen können Geschäftspartner sein.\nHinweis: Marktteilnehmer haben ein eigenes BO, welches sich von diesem BO ableitet.\nHier sollte daher keine Zuordnung zu Marktrollen erfolgen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Geschaeftspartner JSON Schema `_",
+ "title": "Geschaeftspartner",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "GESCHAEFTSPARTNER",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "amtsgericht": {
+ "title": "Amtsgericht",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anrede": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Anrede.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "eMailAdresse": {
+ "title": "Emailadresse",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geschaeftspartnerrolle": {
+ "title": "Geschaeftspartnerrolle",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Geschaeftspartnerrolle.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "glaeubigerId": {
+ "title": "Glaeubigerid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "hrnummer": {
+ "title": "Hrnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istGewerbe": {
+ "title": "Istgewerbe",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kontaktweg": {
+ "title": "Kontaktweg",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kontaktart.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name1": {
+ "title": "Name1",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name2": {
+ "title": "Name2",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name3": {
+ "title": "Name3",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "partneradresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "umsatzsteuerId": {
+ "title": "Umsatzsteuerid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Kosten.json b/unittests/test_data/bo4e_schemas/bo/Kosten.json
new file mode 100644
index 0000000..67663f8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Kosten.json
@@ -0,0 +1,110 @@
+{
+ "description": "Dieses BO wird zur Übertagung von hierarchischen Kostenstrukturen verwendet.\nDie Kosten werden dabei in Kostenblöcke und diese wiederum in Kostenpositionen strukturiert.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Kosten JSON Schema `_",
+ "title": "Kosten",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "KOSTEN",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenbloecke": {
+ "title": "Kostenbloecke",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Kostenblock.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenklasse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Kostenklasse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "summeKosten": {
+ "title": "Summekosten",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Betrag.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Lastgang.json b/unittests/test_data/bo4e_schemas/bo/Lastgang.json
new file mode 100644
index 0000000..75888ce
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Lastgang.json
@@ -0,0 +1,131 @@
+{
+ "description": "Modell zur Abbildung eines Lastganges;\nIn diesem Modell werden die Messwerte mit einem vollständigen Zeitintervall angegeben und es bietet daher eine hohe\nFlexibilität in der Übertragung jeglicher zeitlich veränderlicher Messgrössen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Lastgang JSON Schema `_",
+ "title": "Lastgang",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "LASTGANG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationsId": {
+ "title": "Lokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationstyp": {
+ "title": "Lokationstyp",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messgroesse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "obisKennzahl": {
+ "title": "Obiskennzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "version": {
+ "title": "Version",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "werte": {
+ "title": "Werte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Zeitreihenwert.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/LastgangKompakt.json b/unittests/test_data/bo4e_schemas/bo/LastgangKompakt.json
new file mode 100644
index 0000000..de76e8c
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/LastgangKompakt.json
@@ -0,0 +1,142 @@
+{
+ "description": "Modell zur Abbildung eines kompakten Lastganges.\nIn diesem Modell werden die Messwerte in Form von Tagesvektoren mit fester Anzahl von Werten übertragen.\nDaher ist dieses BO nur zur Übertragung von äquidistanten Messwertverläufen geeignet.",
+ "title": "LastgangKompakt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "LASTGANG_KOMPAKT",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationsId": {
+ "title": "Lokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationstyp": {
+ "title": "Lokationstyp",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messgroesse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "obisKennzahl": {
+ "title": "Obiskennzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tagesvektoren": {
+ "title": "Tagesvektoren",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Tagesvektor.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "version": {
+ "title": "Version",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitintervall": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitintervall.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Marktlokation.json b/unittests/test_data/bo4e_schemas/bo/Marktlokation.json
new file mode 100644
index 0000000..b0e220e
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Marktlokation.json
@@ -0,0 +1,277 @@
+{
+ "description": "Object containing information about a Marktlokation\n\n.. raw:: html\n\n \n\n.. HINT::\n `Marktlokation JSON Schema `_",
+ "title": "Marktlokation",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "MARKTLOKATION",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsgebiet": {
+ "title": "Bilanzierungsgebiet",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Bilanzierungsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "endkunde": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energierichtung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Energierichtung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gasqualitaet": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Gasqualitaet.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gebietstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Gebiettyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geoadresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Geokoordinaten.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "grundversorgercodenr": {
+ "title": "Grundversorgercodenr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istUnterbrechbar": {
+ "title": "Istunterbrechbar",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "katasterinformation": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Katasteradresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundengruppen": {
+ "title": "Kundengruppen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kundentyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationsadresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktlokationsId": {
+ "title": "Marktlokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzbetreibercodenr": {
+ "title": "Netzbetreibercodenr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzebene": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Netzebene.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzgebietsnr": {
+ "title": "Netzgebietsnr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "verbrauchsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Verbrauchsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zugehoerigeMesslokation": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Messlokationszuordnung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Marktteilnehmer.json b/unittests/test_data/bo4e_schemas/bo/Marktteilnehmer.json
new file mode 100644
index 0000000..904a4d0
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Marktteilnehmer.json
@@ -0,0 +1,287 @@
+{
+ "description": "Objekt zur Aufnahme der Information zu einem Marktteilnehmer\n\n.. raw:: html\n\n \n\n.. HINT::\n `Marktteilnehmer JSON Schema `_",
+ "title": "Marktteilnehmer",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "MARKTTEILNEHMER",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "amtsgericht": {
+ "title": "Amtsgericht",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anrede": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Anrede.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "eMailAdresse": {
+ "title": "Emailadresse",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geschaeftspartnerrolle": {
+ "title": "Geschaeftspartnerrolle",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Geschaeftspartnerrolle.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "glaeubigerId": {
+ "title": "Glaeubigerid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "hrnummer": {
+ "title": "Hrnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istGewerbe": {
+ "title": "Istgewerbe",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kontaktweg": {
+ "title": "Kontaktweg",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kontaktart.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "makoadresse": {
+ "title": "Makoadresse",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktrolle": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Marktrolle.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name1": {
+ "title": "Name1",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name2": {
+ "title": "Name2",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name3": {
+ "title": "Name3",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "partneradresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rollencodenummer": {
+ "title": "Rollencodenummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rollencodetyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Rollencodetyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "umsatzsteuerId": {
+ "title": "Umsatzsteuerid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Messlokation.json b/unittests/test_data/bo4e_schemas/bo/Messlokation.json
new file mode 100644
index 0000000..df9b357
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Messlokation.json
@@ -0,0 +1,206 @@
+{
+ "description": "Object containing information about a Messlokation\n\n.. raw:: html\n\n \n\n.. HINT::\n `Messlokation JSON Schema `_",
+ "title": "Messlokation",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "MESSLOKATION",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geoadresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Geokoordinaten.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geraete": {
+ "title": "Geraete",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Geraet.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "grundzustaendigerMsbCodenr": {
+ "title": "Grundzustaendigermsbcodenr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "grundzustaendigerMsbimCodenr": {
+ "title": "Grundzustaendigermsbimcodenr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "katasterinformation": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Katasteradresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messadresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messdienstleistung": {
+ "title": "Messdienstleistung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Dienstleistung.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messgebietnr": {
+ "title": "Messgebietnr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messlokationsId": {
+ "title": "Messlokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messlokationszaehler": {
+ "title": "Messlokationszaehler",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Zaehler.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzebeneMessung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Netzebene.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Preisblatt.json b/unittests/test_data/bo4e_schemas/bo/Preisblatt.json
new file mode 100644
index 0000000..06b0b45
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Preisblatt.json
@@ -0,0 +1,129 @@
+{
+ "description": "Das allgemeine Modell zur Abbildung von Preisen;\nDavon abgeleitet können, über die Zuordnung identifizierender Merkmale, spezielle Preisblatt-Varianten modelliert\nwerden.\n\nDie jeweiligen Sätze von Merkmalen sind in der Grafik ergänzt worden und stellen jeweils eine Ausprägung für die\nverschiedenen Anwendungsfälle der Preisblätter dar.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Preisblatt JSON Schema `_",
+ "title": "Preisblatt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "PREISBLATT",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "herausgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preispositionen": {
+ "title": "Preispositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Preisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/PreisblattDienstleistung.json b/unittests/test_data/bo4e_schemas/bo/PreisblattDienstleistung.json
new file mode 100644
index 0000000..75d60ca
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/PreisblattDienstleistung.json
@@ -0,0 +1,177 @@
+{
+ "description": "Variante des Preisblattmodells zur Abbildung der Preise für wahlfreie Dienstleistungen\n\n.. raw:: html\n\n \n\n.. HINT::\n `PreisblattDienstleistung JSON Schema `_",
+ "title": "PreisblattDienstleistung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "PREISBLATTDIENSTLEISTUNG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "basisdienstleistung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Dienstleistungstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Bilanzierungsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geraetedetails": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geraet.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "herausgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "inklusiveDienstleistungen": {
+ "title": "Inklusivedienstleistungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Dienstleistungstyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preispositionen": {
+ "title": "Preispositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Preisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/PreisblattHardware.json b/unittests/test_data/bo4e_schemas/bo/PreisblattHardware.json
new file mode 100644
index 0000000..8c750a6
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/PreisblattHardware.json
@@ -0,0 +1,192 @@
+{
+ "description": "Variante des Preisblattmodells zur Abbildung der Preise für zusätzliche Hardware\n\n.. raw:: html\n\n \n\n.. HINT::\n `PreisblattHardware JSON Schema `_",
+ "title": "PreisblattHardware",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "PREISBLATTHARDWARE",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "basisgeraet": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geraet.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Bilanzierungsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "herausgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "inklusiveDienstleistungen": {
+ "title": "Inklusivedienstleistungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Dienstleistungstyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "inklusiveGeraete": {
+ "title": "Inklusivegeraete",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Geraet.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messebene": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Netzebene.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preispositionen": {
+ "title": "Preispositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Preisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/PreisblattKonzessionsabgabe.json b/unittests/test_data/bo4e_schemas/bo/PreisblattKonzessionsabgabe.json
new file mode 100644
index 0000000..a93642c
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/PreisblattKonzessionsabgabe.json
@@ -0,0 +1,140 @@
+{
+ "description": "Die Variante des Preisblattmodells zur Abbildung von allgemeinen Abgaben\n\n.. raw:: html\n\n \n\n.. HINT::\n `PreisblattKonzessionsabgabe JSON Schema `_",
+ "title": "PreisblattKonzessionsabgabe",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "PREISBLATTKONZESSIONSABGABE",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "herausgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundengruppeKA": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/KundengruppeKA.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preispositionen": {
+ "title": "Preispositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Preisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/PreisblattMessung.json b/unittests/test_data/bo4e_schemas/bo/PreisblattMessung.json
new file mode 100644
index 0000000..6d86958
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/PreisblattMessung.json
@@ -0,0 +1,192 @@
+{
+ "description": "Variante des Preisblattmodells zur Abbildung der Preise des Messstellenbetriebs und damit verbundener Leistungen\n\n.. raw:: html\n\n \n\n.. HINT::\n `PreisblattMessung JSON Schema `_",
+ "title": "PreisblattMessung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "PREISBLATTMESSUNG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Bilanzierungsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "herausgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "inklusiveDienstleistungen": {
+ "title": "Inklusivedienstleistungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Dienstleistungstyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "inklusiveGeraete": {
+ "title": "Inklusivegeraete",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Geraet.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messebene": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Netzebene.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preispositionen": {
+ "title": "Preispositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Preisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehler": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zaehler.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/PreisblattNetznutzung.json b/unittests/test_data/bo4e_schemas/bo/PreisblattNetznutzung.json
new file mode 100644
index 0000000..37e04c0
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/PreisblattNetznutzung.json
@@ -0,0 +1,162 @@
+{
+ "description": "Die Variante des Preisblattmodells zur Abbildung der Netznutzungspreise\n\n.. raw:: html\n\n \n\n.. HINT::\n `PreisblattNetznutzung JSON Schema `_",
+ "title": "PreisblattNetznutzung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "PREISBLATTNETZNUTZUNG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Bilanzierungsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "herausgeber": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundengruppe": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Kundengruppe.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzebene": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Netzebene.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preispositionen": {
+ "title": "Preispositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Preisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Rechnung.json b/unittests/test_data/bo4e_schemas/bo/Rechnung.json
new file mode 100644
index 0000000..1b8d1ee
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Rechnung.json
@@ -0,0 +1,362 @@
+{
+ "description": "Modell für die Abbildung von Rechnungen und Netznutzungsrechnungen im Kontext der Energiewirtschaft;\n\n.. raw:: html\n\n \n\n.. HINT::\n `Rechnung JSON Schema `_",
+ "title": "Rechnung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "RECHNUNG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "faelligkeitsdatum": {
+ "title": "Faelligkeitsdatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtbrutto": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtnetto": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtsteuer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istOriginal": {
+ "title": "Istoriginal",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istSimuliert": {
+ "title": "Istsimuliert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istStorno": {
+ "title": "Iststorno",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktlokation": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktlokation.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messlokation": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Messlokation.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netznutzungrechnungsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/NetznutzungRechnungsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netznutzungrechnungstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/NetznutzungRechnungstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "originalRechnungsnummer": {
+ "title": "Originalrechnungsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rabattBrutto": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsdatum": {
+ "title": "Rechnungsdatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsempfaenger": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsersteller": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsnummer": {
+ "title": "Rechnungsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsperiode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungspositionen": {
+ "title": "Rechnungspositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Rechnungsposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Rechnungsstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungstitel": {
+ "title": "Rechnungstitel",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Rechnungstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "steuerbetraege": {
+ "title": "Steuerbetraege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Steuerbetrag.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vorausgezahlt": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zuZahlen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Region.json b/unittests/test_data/bo4e_schemas/bo/Region.json
new file mode 100644
index 0000000..c918c9a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Region.json
@@ -0,0 +1,100 @@
+{
+ "description": "Modellierung einer Region als Menge von Kriterien, die eine Region beschreiben\n\n.. raw:: html\n\n \n\n.. HINT::\n `Region JSON Schema `_",
+ "title": "Region",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "REGION",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "negativListe": {
+ "title": "Negativliste",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Regionskriterium.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positivListe": {
+ "title": "Positivliste",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Regionskriterium.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Regionaltarif.json b/unittests/test_data/bo4e_schemas/bo/Regionaltarif.json
new file mode 100644
index 0000000..b944a3e
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Regionaltarif.json
@@ -0,0 +1,306 @@
+{
+ "description": ".. raw:: html\n\n \n\n.. HINT::\n `Regionaltarif JSON Schema `_",
+ "title": "Regionaltarif",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "REGIONALTARIF",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbieter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbietername": {
+ "title": "Anbietername",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anwendungVon": {
+ "title": "Anwendungvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "berechnungsparameter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Tarifberechnungsparameter.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemix": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundentypen": {
+ "title": "Kundentypen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kundentyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisgarantien": {
+ "title": "Preisgarantien",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/RegionalePreisgarantie.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstand": {
+ "title": "Preisstand",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "registeranzahl": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Registeranzahl.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifAufAbschlaege": {
+ "title": "Tarifaufabschlaege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/RegionalerAufAbschlag.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifeinschraenkung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Tarifeinschraenkung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifmerkmale": {
+ "title": "Tarifmerkmale",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Tarifmerkmal.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifpreise": {
+ "title": "Tarifpreise",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/RegionaleTarifpreisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tariftyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tariftyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Standorteigenschaften.json b/unittests/test_data/bo4e_schemas/bo/Standorteigenschaften.json
new file mode 100644
index 0000000..99ef030
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Standorteigenschaften.json
@@ -0,0 +1,84 @@
+{
+ "description": "Modelliert die regionalen und spartenspezifischen Eigenschaften einer gegebenen Adresse.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Standorteigenschaften JSON Schema `_",
+ "title": "Standorteigenschaften",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "STANDORTEIGENSCHAFTEN",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "eigenschaftenGas": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/StandorteigenschaftenGas.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "eigenschaftenStrom": {
+ "title": "Eigenschaftenstrom",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/StandorteigenschaftenStrom.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Tarif.json b/unittests/test_data/bo4e_schemas/bo/Tarif.json
new file mode 100644
index 0000000..35c130d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Tarif.json
@@ -0,0 +1,302 @@
+{
+ "description": "Abbildung eines Tarifs mit regionaler Zuordnung von Preisen und Auf- und Abschlägen\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarif JSON Schema `_",
+ "title": "Tarif",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "TARIF",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbieter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbietername": {
+ "title": "Anbietername",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anwendungVon": {
+ "title": "Anwendungvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "berechnungsparameter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Tarifberechnungsparameter.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemix": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundentypen": {
+ "title": "Kundentypen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kundentyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisgarantie": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Preisgarantie.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstand": {
+ "title": "Preisstand",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "registeranzahl": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Registeranzahl.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifAufAbschlaege": {
+ "title": "Tarifaufabschlaege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/AufAbschlagRegional.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifeinschraenkung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Tarifeinschraenkung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifmerkmale": {
+ "title": "Tarifmerkmale",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Tarifmerkmal.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifpreise": {
+ "title": "Tarifpreise",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/TarifpreispositionProOrt.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tariftyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tariftyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Tarifinfo.json b/unittests/test_data/bo4e_schemas/bo/Tarifinfo.json
new file mode 100644
index 0000000..753c726
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Tarifinfo.json
@@ -0,0 +1,226 @@
+{
+ "description": "Das BO Tarifinfo liefert die Merkmale, die einen Endkundentarif identifizierbar machen.\nDieses BO dient als Basis für weitere BOs mit erweiterten Anwendungsmöglichkeiten.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifinfo JSON Schema `_",
+ "title": "Tarifinfo",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "TARIFINFO",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbieter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbietername": {
+ "title": "Anbietername",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anwendungVon": {
+ "title": "Anwendungvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemix": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundentypen": {
+ "title": "Kundentypen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kundentyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "registeranzahl": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Registeranzahl.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifmerkmale": {
+ "title": "Tarifmerkmale",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Tarifmerkmal.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tariftyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tariftyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Tarifkosten.json b/unittests/test_data/bo4e_schemas/bo/Tarifkosten.json
new file mode 100644
index 0000000..662c801
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Tarifkosten.json
@@ -0,0 +1,237 @@
+{
+ "description": "Objekt zur Kommunikation von Kosten, die im Rahmen der Tarifanwendung entstehen\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifkosten JSON Schema `_",
+ "title": "Tarifkosten",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "TARIFKOSTEN",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbieter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbietername": {
+ "title": "Anbietername",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anwendungVon": {
+ "title": "Anwendungvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemix": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kosten": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Kosten.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundentypen": {
+ "title": "Kundentypen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kundentyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "registeranzahl": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Registeranzahl.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifmerkmale": {
+ "title": "Tarifmerkmale",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Tarifmerkmal.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tariftyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tariftyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Tarifpreisblatt.json b/unittests/test_data/bo4e_schemas/bo/Tarifpreisblatt.json
new file mode 100644
index 0000000..3228f95
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Tarifpreisblatt.json
@@ -0,0 +1,302 @@
+{
+ "description": "Tarifinformation mit Preisen, Aufschlägen und Berechnungssystematik\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifpreisblatt JSON Schema `_",
+ "title": "Tarifpreisblatt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "TARIFPREISBLATT",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbieter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Marktteilnehmer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anbietername": {
+ "title": "Anbietername",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anwendungVon": {
+ "title": "Anwendungvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "berechnungsparameter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Tarifberechnungsparameter.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemix": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kundentypen": {
+ "title": "Kundentypen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Kundentyp.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisgarantie": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Preisgarantie.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstand": {
+ "title": "Preisstand",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "registeranzahl": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Registeranzahl.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifAufAbschlaege": {
+ "title": "Tarifaufabschlaege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/AufAbschlag.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifeinschraenkung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Tarifeinschraenkung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifmerkmale": {
+ "title": "Tarifmerkmale",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Tarifmerkmal.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifpreise": {
+ "title": "Tarifpreise",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Tarifpreisposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tariftyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tariftyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Vertrag.json b/unittests/test_data/bo4e_schemas/bo/Vertrag.json
new file mode 100644
index 0000000..5083de4
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Vertrag.json
@@ -0,0 +1,219 @@
+{
+ "description": "Modell für die Abbildung von Vertragsbeziehungen;\nDas Objekt dient dazu, alle Arten von Verträgen, die in der Energiewirtschaft Verwendung finden, abzubilden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Vertrag JSON Schema `_",
+ "title": "Vertrag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "VERTRAG",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "unterzeichnervp1": {
+ "title": "Unterzeichnervp1",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Unterschrift.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "unterzeichnervp2": {
+ "title": "Unterzeichnervp2",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Unterschrift.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Vertragsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsbeginn": {
+ "title": "Vertragsbeginn",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsende": {
+ "title": "Vertragsende",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragskonditionen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../com/Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsnummer": {
+ "title": "Vertragsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragspartner1": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragspartner2": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Vertragsstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsteile": {
+ "title": "Vertragsteile",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Vertragsteil.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Zaehler.json b/unittests/test_data/bo4e_schemas/bo/Zaehler.json
new file mode 100644
index 0000000..ac9e2c1
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Zaehler.json
@@ -0,0 +1,252 @@
+{
+ "description": "Object containing information about a meter/\"Zaehler\".\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zaehler JSON Schema `_",
+ "title": "Zaehler",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "ZAEHLER",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "befestigungsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Befestigungsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "eichungBis": {
+ "title": "Eichungbis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "geraete": {
+ "title": "Geraete",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Geraet.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istFernschaltbar": {
+ "title": "Istfernschaltbar",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "letzteEichung": {
+ "title": "Letzteeichung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messwerterfassung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messwerterfassung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "registeranzahl": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Registeranzahl.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sparte": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlerauspraegung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zaehlerauspraegung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlergroesse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zaehlergroesse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlerhersteller": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Geschaeftspartner.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlerkonstante": {
+ "title": "Zaehlerkonstante",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlernummer": {
+ "title": "Zaehlernummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlertyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zaehlertyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlertypSpezifikation": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/ZaehlertypSpezifikation.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlwerke": {
+ "title": "Zaehlwerke",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Zaehlwerk.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/bo/Zeitreihe.json b/unittests/test_data/bo4e_schemas/bo/Zeitreihe.json
new file mode 100644
index 0000000..4b85c9b
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/bo/Zeitreihe.json
@@ -0,0 +1,152 @@
+{
+ "description": "Abbildung einer allgemeinen Zeitreihe mit einem Wertvektor.\nDie Werte können mit wahlfreier zeitlicher Distanz im Vektor abgelegt sein.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zeitreihe JSON Schema `_",
+ "title": "Zeitreihe",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_typ": {
+ "default": "ZEITREIHE",
+ "anyOf": [
+ {
+ "$ref": "../enum/Typ.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "externeReferenzen": {
+ "title": "Externereferenzen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/ExterneReferenz.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "medium": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Medium.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messgroesse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messgroesse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "version": {
+ "title": "Version",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "werte": {
+ "title": "Werte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../com/Zeitreihenwert.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wertherkunft": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Wertermittlungsverfahren.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Adresse.json b/unittests/test_data/bo4e_schemas/com/Adresse.json
new file mode 100644
index 0000000..dbd4dd9
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Adresse.json
@@ -0,0 +1,139 @@
+{
+ "description": "Contains an address that can be used for most purposes.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Adresse JSON Schema `_",
+ "title": "Adresse",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "adresszusatz": {
+ "title": "Adresszusatz",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "coErgaenzung": {
+ "title": "Coergaenzung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "hausnummer": {
+ "title": "Hausnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "landescode": {
+ "default": "DE",
+ "anyOf": [
+ {
+ "$ref": "../enum/Landescode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ort": {
+ "title": "Ort",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ortsteil": {
+ "title": "Ortsteil",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "postfach": {
+ "title": "Postfach",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "postleitzahl": {
+ "title": "Postleitzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "strasse": {
+ "title": "Strasse",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Angebotsposition.json b/unittests/test_data/bo4e_schemas/com/Angebotsposition.json
new file mode 100644
index 0000000..f3de6b9
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Angebotsposition.json
@@ -0,0 +1,77 @@
+{
+ "description": "Unterhalb von Angebotsteilen sind die Angebotspositionen eingebunden.\nHier werden die angebotenen Bestandteile einzeln aufgeführt. Beispiel:\nPositionsmenge: 4000 kWh\nPositionspreis: 24,56 ct/kWh\nPositionskosten: 982,40 EUR\n\n.. raw:: html\n\n \n\n.. HINT::\n `Angebotsposition JSON Schema `_",
+ "title": "Angebotsposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionsbezeichnung": {
+ "title": "Positionsbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionskosten": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionsmenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionspreis": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Angebotsteil.json b/unittests/test_data/bo4e_schemas/com/Angebotsteil.json
new file mode 100644
index 0000000..9400b15
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Angebotsteil.json
@@ -0,0 +1,107 @@
+{
+ "description": "Mit dieser Komponente wird ein Teil einer Angebotsvariante abgebildet.\nHier werden alle Angebotspositionen aggregiert.\nAngebotsteile werden im einfachsten Fall für eine Marktlokation oder Lieferstellenadresse erzeugt.\nHier werden die Mengen und Gesamtkosten aller Angebotspositionen zusammengefasst.\nEine Variante besteht mindestens aus einem Angebotsteil.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Angebotsteil JSON Schema `_",
+ "title": "Angebotsteil",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anfrageSubreferenz": {
+ "title": "Anfragesubreferenz",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtkostenangebotsteil": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtmengeangebotsteil": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferstellenangebotsteil": {
+ "title": "Lieferstellenangebotsteil",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../bo/Marktlokation.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferzeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionen": {
+ "title": "Positionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Angebotsposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Angebotsvariante.json b/unittests/test_data/bo4e_schemas/com/Angebotsvariante.json
new file mode 100644
index 0000000..e631ae2
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Angebotsvariante.json
@@ -0,0 +1,106 @@
+{
+ "description": "Führt die verschiedenen Ausprägungen der Angebotsberechnung auf\n\n.. raw:: html\n\n \n\n.. HINT::\n `Angebotsvariante JSON Schema `_",
+ "title": "Angebotsvariante",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "angebotsstatus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Angebotsstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bindefrist": {
+ "title": "Bindefrist",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "erstellungsdatum": {
+ "title": "Erstellungsdatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtkosten": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtmenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "teile": {
+ "title": "Teile",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Angebotsteil.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/AufAbschlag.json b/unittests/test_data/bo4e_schemas/com/AufAbschlag.json
new file mode 100644
index 0000000..627ee88
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/AufAbschlag.json
@@ -0,0 +1,127 @@
+{
+ "description": "Modell für die preiserhöhenden (Aufschlag) bzw. preisvermindernden (Abschlag) Zusatzvereinbarungen,\ndie individuell zu einem neuen oder bestehenden Liefervertrag abgeschlossen wurden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `AufAbschlag JSON Schema `_",
+ "title": "AufAbschlag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagsziel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagsziel.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeitszeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffeln": {
+ "title": "Staffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Preisstaffel.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/AufAbschlagProOrt.json b/unittests/test_data/bo4e_schemas/com/AufAbschlagProOrt.json
new file mode 100644
index 0000000..7c207f0
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/AufAbschlagProOrt.json
@@ -0,0 +1,83 @@
+{
+ "description": "Mit dieser Komponente können Auf- und Abschläge verschiedener Typen im Zusammenhang\nmit örtlichen Gültigkeiten abgebildet werden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `AufAbschlagProOrt JSON Schema `_",
+ "title": "AufAbschlagProOrt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netznr": {
+ "title": "Netznr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ort": {
+ "title": "Ort",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "postleitzahl": {
+ "title": "Postleitzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffeln": {
+ "title": "Staffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "AufAbschlagstaffelProOrt.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/AufAbschlagRegional.json b/unittests/test_data/bo4e_schemas/com/AufAbschlagRegional.json
new file mode 100644
index 0000000..e3788cb
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/AufAbschlagRegional.json
@@ -0,0 +1,213 @@
+{
+ "description": "Mit dieser Komponente können Auf- und Abschläge verschiedener Typen\nim Zusammenhang mit regionalen Gültigkeiten abgebildet werden.\nHier sind auch die Auswirkungen auf verschiedene Tarifparameter modelliert,\ndie sich durch die Auswahl eines Auf- oder Abschlags ergeben.\n\n.. raw:: html\n\n \n\n.. HINT::\n `AufAbschlagRegional JSON Schema `_",
+ "title": "AufAbschlagRegional",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagsziel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagsziel.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "betraege": {
+ "title": "Betraege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "AufAbschlagProOrt.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einschraenkungsaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Tarifeinschraenkung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemixaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "garantieaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preisgarantie.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeitszeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifnamensaenderungen": {
+ "title": "Tarifnamensaenderungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertagskonditionsaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "voraussetzungen": {
+ "title": "Voraussetzungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zusatzprodukte": {
+ "title": "Zusatzprodukte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/AufAbschlagstaffelProOrt.json b/unittests/test_data/bo4e_schemas/com/AufAbschlagstaffelProOrt.json
new file mode 100644
index 0000000..8d31f96
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/AufAbschlagstaffelProOrt.json
@@ -0,0 +1,77 @@
+{
+ "description": "Gibt den Wert eines Auf- oder Abschlags und dessen Staffelgrenzen an\n\n.. raw:: html\n\n \n\n.. HINT::\n `AufAbschlagstaffelProOrt JSON Schema `_",
+ "title": "AufAbschlagstaffelProOrt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeBis": {
+ "title": "Staffelgrenzebis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeVon": {
+ "title": "Staffelgrenzevon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Ausschreibungsdetail.json b/unittests/test_data/bo4e_schemas/com/Ausschreibungsdetail.json
new file mode 100644
index 0000000..99960fb
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Ausschreibungsdetail.json
@@ -0,0 +1,205 @@
+{
+ "description": "Die Komponente Ausschreibungsdetail wird verwendet um die Informationen zu einer Abnahmestelle innerhalb eines\nAusschreibungsloses abzubilden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Ausschreibungsdetail JSON Schema `_",
+ "title": "Ausschreibungsdetail",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istLastgangVorhanden": {
+ "title": "Istlastgangvorhanden",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kunde": {
+ "title": "Kunde",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferzeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktlokationsId": {
+ "title": "Marktlokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktlokationsadresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktlokationsbezeichnung": {
+ "title": "Marktlokationsbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzbetreiber": {
+ "title": "Netzbetreiber",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzebeneLieferung": {
+ "title": "Netzebenelieferung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzebeneMessung": {
+ "title": "Netzebenemessung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "prognoseArbeitLieferzeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "prognoseJahresarbeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "prognoseLeistung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rechnungsadresse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Adresse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlernummer": {
+ "title": "Zaehlernummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlertechnik": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zaehlertyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Ausschreibungslos.json b/unittests/test_data/bo4e_schemas/com/Ausschreibungslos.json
new file mode 100644
index 0000000..ee26a91
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Ausschreibungslos.json
@@ -0,0 +1,228 @@
+{
+ "description": "Eine Komponente zur Abbildung einzelner Lose einer Ausschreibung\n\n.. raw:: html\n\n \n\n.. HINT::\n `Ausschreibungslos JSON Schema `_",
+ "title": "Ausschreibungslos",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anzahlLieferstellen": {
+ "title": "Anzahllieferstellen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "betreutDurch": {
+ "title": "Betreutdurch",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energieart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gesamtMenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferstellen": {
+ "title": "Lieferstellen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Ausschreibungsdetail.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferzeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "losnummer": {
+ "title": "Losnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preismodell": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preismodell.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wiederholungsintervall": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wunschKuendingungsfrist": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wunschMaximalmenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wunschMindestmenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wunschRechnungslegung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Rechnungslegung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wunschVertragsform": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Vertragsform.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wunschZahlungsziel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Betrag.json b/unittests/test_data/bo4e_schemas/com/Betrag.json
new file mode 100644
index 0000000..fe86973
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Betrag.json
@@ -0,0 +1,58 @@
+{
+ "description": "Die Komponente wird dazu verwendet, Summenbeträge (beispielsweise in Angeboten und Rechnungen) als Geldbeträge\nabzubilden. Die Einheit ist dabei immer die Hauptwährung also Euro, Dollar etc…\n\n.. raw:: html\n\n \n\n.. HINT::\n `Betrag JSON Schema `_",
+ "title": "Betrag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "waehrung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungscode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/COM.json b/unittests/test_data/bo4e_schemas/com/COM.json
new file mode 100644
index 0000000..176adf2
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/COM.json
@@ -0,0 +1,32 @@
+{
+ "description": "base class for all components\n\n.. raw:: html\n\n \n\n.. HINT::\n `COM JSON Schema `_",
+ "title": "COM",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Dienstleistung.json b/unittests/test_data/bo4e_schemas/com/Dienstleistung.json
new file mode 100644
index 0000000..bee4070
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Dienstleistung.json
@@ -0,0 +1,55 @@
+{
+ "description": "Abbildung einer abrechenbaren Dienstleistung.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Dienstleistung JSON Schema `_",
+ "title": "Dienstleistung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "dienstleistungstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Dienstleistungstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Energieherkunft.json b/unittests/test_data/bo4e_schemas/com/Energieherkunft.json
new file mode 100644
index 0000000..0e5c004
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Energieherkunft.json
@@ -0,0 +1,58 @@
+{
+ "description": "Abbildung einer Energieherkunft\n\n.. raw:: html\n\n \n\n.. HINT::\n `Energieherkunft JSON Schema `_",
+ "title": "Energieherkunft",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anteilProzent": {
+ "title": "Anteilprozent",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "erzeugungsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Erzeugungsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Energiemix.json b/unittests/test_data/bo4e_schemas/com/Energiemix.json
new file mode 100644
index 0000000..a9277fb
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Energiemix.json
@@ -0,0 +1,190 @@
+{
+ "description": "Zusammensetzung der gelieferten Energie aus den verschiedenen Primärenergieformen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Energiemix JSON Schema `_",
+ "title": "Energiemix",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anteil": {
+ "title": "Anteil",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Energieherkunft.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "atommuell": {
+ "title": "Atommuell",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bemerkung": {
+ "title": "Bemerkung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "co2Emission": {
+ "title": "Co2Emission",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energieart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Sparte.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemixnummer": {
+ "title": "Energiemixnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeitsjahr": {
+ "title": "Gueltigkeitsjahr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istInOekoTopTen": {
+ "title": "Istinoekotopten",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "oekolabel": {
+ "title": "Oekolabel",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Oekolabel.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "oekozertifikate": {
+ "title": "Oekozertifikate",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Oekozertifikat.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/ExterneReferenz.json b/unittests/test_data/bo4e_schemas/com/ExterneReferenz.json
new file mode 100644
index 0000000..c46eb09
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/ExterneReferenz.json
@@ -0,0 +1,56 @@
+{
+ "description": "Viele Datenobjekte weisen in unterschiedlichen Systemen eine eindeutige ID (Kundennummer, GP-Nummer etc.) auf.\nBeim Austausch von Datenobjekten zwischen verschiedenen Systemen ist es daher hilfreich,\nsich die eindeutigen IDs der anzubindenden Systeme zu merken.\n\n.. raw:: html\n\n \n\n.. HINT::\n `ExterneReferenz JSON Schema `_",
+ "title": "ExterneReferenz",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "exRefName": {
+ "title": "Exrefname",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "exRefWert": {
+ "title": "Exrefwert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Fremdkostenblock.json b/unittests/test_data/bo4e_schemas/com/Fremdkostenblock.json
new file mode 100644
index 0000000..505e2a7
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Fremdkostenblock.json
@@ -0,0 +1,70 @@
+{
+ "description": "Komponente zur Abbildung eines Kostenblocks in den Fremdkosten\n\n.. raw:: html\n\n \n\n.. HINT::\n `Fremdkostenblock JSON Schema `_",
+ "title": "Fremdkostenblock",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenblockbezeichnung": {
+ "title": "Kostenblockbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenpositionen": {
+ "title": "Kostenpositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Fremdkostenposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "summeKostenblock": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Fremdkostenposition.json b/unittests/test_data/bo4e_schemas/com/Fremdkostenposition.json
new file mode 100644
index 0000000..d5fce11
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Fremdkostenposition.json
@@ -0,0 +1,186 @@
+{
+ "description": "Eine Kostenposition im Bereich der Fremdkosten\n\n.. raw:: html\n\n \n\n.. HINT::\n `Fremdkostenposition JSON Schema `_",
+ "title": "Fremdkostenposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artikelbezeichnung": {
+ "title": "Artikelbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artikeldetail": {
+ "title": "Artikeldetail",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "betragKostenposition": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bis": {
+ "title": "Bis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einzelpreis": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gebietcodeEic": {
+ "title": "Gebietcodeeic",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "linkPreisblatt": {
+ "title": "Linkpreisblatt",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktpartnercode": {
+ "title": "Marktpartnercode",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktpartnername": {
+ "title": "Marktpartnername",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "menge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionstitel": {
+ "title": "Positionstitel",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "von": {
+ "title": "Von",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitmenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Geokoordinaten.json b/unittests/test_data/bo4e_schemas/com/Geokoordinaten.json
new file mode 100644
index 0000000..1b94bc5
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Geokoordinaten.json
@@ -0,0 +1,62 @@
+{
+ "description": "This component provides the geo-coordinates for a location.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Geokoordinaten JSON Schema `_",
+ "title": "Geokoordinaten",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "breitengrad": {
+ "title": "Breitengrad",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "laengengrad": {
+ "title": "Laengengrad",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Katasteradresse.json b/unittests/test_data/bo4e_schemas/com/Katasteradresse.json
new file mode 100644
index 0000000..f21afca
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Katasteradresse.json
@@ -0,0 +1,56 @@
+{
+ "description": "Dient der Adressierung über die Liegenschafts-Information.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Katasteradresse JSON Schema `_",
+ "title": "Katasteradresse",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "flurstueck": {
+ "title": "Flurstueck",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gemarkungFlur": {
+ "title": "Gemarkungflur",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Konzessionsabgabe.json b/unittests/test_data/bo4e_schemas/com/Konzessionsabgabe.json
new file mode 100644
index 0000000..7bc5df8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Konzessionsabgabe.json
@@ -0,0 +1,70 @@
+{
+ "description": "Diese Komponente wird zur Übertagung der Details zu einer Konzessionsabgabe verwendet.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Konzessionsabgabe JSON Schema `_",
+ "title": "Konzessionsabgabe",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kategorie": {
+ "title": "Kategorie",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kosten": {
+ "title": "Kosten",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "satz": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AbgabeArt.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Kostenblock.json b/unittests/test_data/bo4e_schemas/com/Kostenblock.json
new file mode 100644
index 0000000..8d44d53
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Kostenblock.json
@@ -0,0 +1,70 @@
+{
+ "description": "Mit dieser Komponente werden mehrere Kostenpositionen zusammengefasst.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Kostenblock JSON Schema `_",
+ "title": "Kostenblock",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenblockbezeichnung": {
+ "title": "Kostenblockbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kostenpositionen": {
+ "title": "Kostenpositionen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Kostenposition.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "summeKostenblock": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Kostenposition.json b/unittests/test_data/bo4e_schemas/com/Kostenposition.json
new file mode 100644
index 0000000..a5588af
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Kostenposition.json
@@ -0,0 +1,138 @@
+{
+ "description": "Diese Komponente wird zur Übertagung der Details zu einer Kostenposition verwendet.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Kostenposition JSON Schema `_",
+ "title": "Kostenposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artikelbezeichnung": {
+ "title": "Artikelbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artikeldetail": {
+ "title": "Artikeldetail",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "betragKostenposition": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bis": {
+ "title": "Bis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einzelpreis": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "menge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionstitel": {
+ "title": "Positionstitel",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "von": {
+ "title": "Von",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitmenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/KriteriumWert.json b/unittests/test_data/bo4e_schemas/com/KriteriumWert.json
new file mode 100644
index 0000000..bf09f97
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/KriteriumWert.json
@@ -0,0 +1,55 @@
+{
+ "description": "Mit dieser Komponente können Kriterien und deren Werte definiert werden\n\n.. raw:: html\n\n \n\n.. HINT::\n `KriteriumWert JSON Schema `_",
+ "title": "KriteriumWert",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kriterium": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tarifregionskriterium.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/MarktgebietInfo.json b/unittests/test_data/bo4e_schemas/com/MarktgebietInfo.json
new file mode 100644
index 0000000..a2e2af4
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/MarktgebietInfo.json
@@ -0,0 +1,56 @@
+{
+ "description": "Informationen zum Marktgebiet im Gas.\n\n.. raw:: html\n\n \n\n.. HINT::\n `MarktgebietInfo JSON Schema `_",
+ "title": "MarktgebietInfo",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktgebiet": {
+ "title": "Marktgebiet",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktgebietcode": {
+ "title": "Marktgebietcode",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Menge.json b/unittests/test_data/bo4e_schemas/com/Menge.json
new file mode 100644
index 0000000..fe9a4c3
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Menge.json
@@ -0,0 +1,58 @@
+{
+ "description": "Abbildung einer Menge mit Wert und Einheit.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Menge JSON Schema `_",
+ "title": "Menge",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Messlokationszuordnung.json b/unittests/test_data/bo4e_schemas/com/Messlokationszuordnung.json
new file mode 100644
index 0000000..258f021
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Messlokationszuordnung.json
@@ -0,0 +1,81 @@
+{
+ "description": "Mit dieser Komponente werden Messlokationen zu Marktlokationen zugeordnet.\nDabei kann eine arithmetische Operation (Addition, Subtraktion, Multiplikation, Division) angegeben werden,\nmit der die Messlokation zum Verbrauch der Marktlokation beiträgt.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Messlokationszuordnung JSON Schema `_",
+ "title": "Messlokationszuordnung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "arithmetik": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/ArithmetischeOperation.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigBis": {
+ "title": "Gueltigbis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigSeit": {
+ "title": "Gueltigseit",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messlokationsId": {
+ "title": "Messlokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/PositionsAufAbschlag.json b/unittests/test_data/bo4e_schemas/com/PositionsAufAbschlag.json
new file mode 100644
index 0000000..11873b7
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/PositionsAufAbschlag.json
@@ -0,0 +1,93 @@
+{
+ "description": "Differenzierung der zu betrachtenden Produkte anhand der preiserhöhenden (Aufschlag)\nbzw. preisvermindernden (Abschlag) Zusatzvereinbarungen,\ndie individuell zu einem neuen oder bestehenden Liefervertrag abgeschlossen werden können.\nEs können mehrere Auf-/Abschläge gleichzeitig ausgewählt werden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `PositionsAufAbschlag JSON Schema `_",
+ "title": "PositionsAufAbschlag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagswaehrung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagswert": {
+ "title": "Aufabschlagswert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Preis.json b/unittests/test_data/bo4e_schemas/com/Preis.json
new file mode 100644
index 0000000..1806a12
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Preis.json
@@ -0,0 +1,80 @@
+{
+ "description": "Abbildung eines Preises mit Wert, Einheit, Bezugswert und Status.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Preis JSON Schema `_",
+ "title": "Preis",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezugswert": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "status": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Preisgarantie.json b/unittests/test_data/bo4e_schemas/com/Preisgarantie.json
new file mode 100644
index 0000000..f95647d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Preisgarantie.json
@@ -0,0 +1,66 @@
+{
+ "description": "Definition für eine Preisgarantie mit der Möglichkeit verschiedener Ausprägungen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Preisgarantie JSON Schema `_",
+ "title": "Preisgarantie",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisgarantietyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisgarantietyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Preisposition.json b/unittests/test_data/bo4e_schemas/com/Preisposition.json
new file mode 100644
index 0000000..0caa67d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Preisposition.json
@@ -0,0 +1,189 @@
+{
+ "description": "Preis für eine definierte Lieferung oder Leistung innerhalb eines Preisblattes\n\n.. raw:: html\n\n \n\n.. HINT::\n `Preisposition JSON Schema `_",
+ "title": "Preisposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bdewArtikelnummer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/BDEWArtikelnummer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "berechnungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Kalkulationsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezugsgroesse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "freimengeBlindarbeit": {
+ "title": "Freimengeblindarbeit",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "freimengeLeistungsfaktor": {
+ "title": "Freimengeleistungsfaktor",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gruppenartikelId": {
+ "title": "Gruppenartikelid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "leistungsbezeichnung": {
+ "title": "Leistungsbezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "leistungstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Leistungstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preiseinheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstaffeln": {
+ "title": "Preisstaffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Preisstaffel.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifzeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tarifzeit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitbasis": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zeiteinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zonungsgroesse": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Bemessungsgroesse.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Preisstaffel.json b/unittests/test_data/bo4e_schemas/com/Preisstaffel.json
new file mode 100644
index 0000000..a10c95a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Preisstaffel.json
@@ -0,0 +1,88 @@
+{
+ "description": "Gibt die Staffelgrenzen der jeweiligen Preise an\n\n.. raw:: html\n\n \n\n.. HINT::\n `Preisstaffel JSON Schema `_",
+ "title": "Preisstaffel",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheitspreis": {
+ "title": "Einheitspreis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sigmoidparameter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Sigmoidparameter.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeBis": {
+ "title": "Staffelgrenzebis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeVon": {
+ "title": "Staffelgrenzevon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Rechnungsposition.json b/unittests/test_data/bo4e_schemas/com/Rechnungsposition.json
new file mode 100644
index 0000000..3da525f
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Rechnungsposition.json
@@ -0,0 +1,194 @@
+{
+ "description": "Über Rechnungspositionen werden Rechnungen strukturiert.\nIn einem Rechnungsteil wird jeweils eine in sich geschlossene Leistung abgerechnet.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Rechnungsposition JSON Schema `_",
+ "title": "Rechnungsposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artikelId": {
+ "title": "Artikelid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artikelnummer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/BDEWArtikelnummer.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einzelpreis": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferungBis": {
+ "title": "Lieferungbis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lieferungVon": {
+ "title": "Lieferungvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokationsId": {
+ "title": "Lokationsid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionsMenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionsnummer": {
+ "title": "Positionsnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "positionstext": {
+ "title": "Positionstext",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "teilrabattNetto": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "teilsummeNetto": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Betrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "teilsummeSteuer": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Steuerbetrag.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitbezogeneMenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeiteinheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zeiteinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/RegionaleGueltigkeit.json b/unittests/test_data/bo4e_schemas/com/RegionaleGueltigkeit.json
new file mode 100644
index 0000000..f53e1a0
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/RegionaleGueltigkeit.json
@@ -0,0 +1,58 @@
+{
+ "description": "Mit dieser Komponente können regionale Gültigkeiten, z.B. für Tarife, Zu- und Abschläge und Preise definiert werden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `RegionaleGueltigkeit JSON Schema `_",
+ "title": "RegionaleGueltigkeit",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeitstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Gueltigkeitstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kriteriumsWerte": {
+ "title": "Kriteriumswerte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "KriteriumWert.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/RegionalePreisgarantie.json b/unittests/test_data/bo4e_schemas/com/RegionalePreisgarantie.json
new file mode 100644
index 0000000..4f70b9c
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/RegionalePreisgarantie.json
@@ -0,0 +1,77 @@
+{
+ "description": "Abbildung einer Preisgarantie mit regionaler Abgrenzung\n\n.. raw:: html\n\n \n\n.. HINT::\n `RegionalePreisgarantie JSON Schema `_",
+ "title": "RegionalePreisgarantie",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisgarantietyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisgarantietyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "regionaleGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "RegionaleGueltigkeit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeitlicheGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/RegionalePreisstaffel.json b/unittests/test_data/bo4e_schemas/com/RegionalePreisstaffel.json
new file mode 100644
index 0000000..3ce299b
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/RegionalePreisstaffel.json
@@ -0,0 +1,99 @@
+{
+ "description": "Abbildung einer Preisstaffel mit regionaler Abgrenzung\n\n.. raw:: html\n\n \n\n.. HINT::\n `RegionalePreisstaffel JSON Schema `_",
+ "title": "RegionalePreisstaffel",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheitspreis": {
+ "title": "Einheitspreis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "regionaleGueltigkeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "RegionaleGueltigkeit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "sigmoidparameter": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Sigmoidparameter.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeBis": {
+ "title": "Staffelgrenzebis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeVon": {
+ "title": "Staffelgrenzevon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/RegionaleTarifpreisposition.json b/unittests/test_data/bo4e_schemas/com/RegionaleTarifpreisposition.json
new file mode 100644
index 0000000..48a55d3
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/RegionaleTarifpreisposition.json
@@ -0,0 +1,91 @@
+{
+ "description": "Mit dieser Komponente können Tarifpreise verschiedener Typen im Zusammenhang mit regionalen Gültigkeiten abgebildet\nwerden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `RegionaleTarifpreisposition JSON Schema `_",
+ "title": "RegionaleTarifpreisposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezugseinheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "mengeneinheitstaffel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstaffeln": {
+ "title": "Preisstaffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "RegionalePreisstaffel.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preistyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preistyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/RegionalerAufAbschlag.json b/unittests/test_data/bo4e_schemas/com/RegionalerAufAbschlag.json
new file mode 100644
index 0000000..39e2221
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/RegionalerAufAbschlag.json
@@ -0,0 +1,213 @@
+{
+ "description": "Mit dieser Komponente können Auf- und Abschläge verschiedener Typen im Zusammenhang mit regionalen Gültigkeiten\nabgebildet werden.\nHier sind auch die Auswirkungen auf verschiedene Tarifparameter modelliert, die sich durch die Auswahl eines Auf-\noder Abschlags ergeben.\n\n.. raw:: html\n\n \n\n.. HINT::\n `RegionalerAufAbschlag JSON Schema `_",
+ "title": "RegionalerAufAbschlag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "aufAbschlagsziel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/AufAbschlagsziel.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einschraenkungsaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Tarifeinschraenkung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "energiemixaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Energiemix.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "garantieaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preisgarantie.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeitszeitraum": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffeln": {
+ "title": "Staffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "RegionalePreisstaffel.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tarifnamensaenderungen": {
+ "title": "Tarifnamensaenderungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertagskonditionsaenderung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Vertragskonditionen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "voraussetzungen": {
+ "title": "Voraussetzungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "website": {
+ "title": "Website",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zusatzprodukte": {
+ "title": "Zusatzprodukte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Regionskriterium.json b/unittests/test_data/bo4e_schemas/com/Regionskriterium.json
new file mode 100644
index 0000000..b432ee4
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Regionskriterium.json
@@ -0,0 +1,66 @@
+{
+ "description": "Komponente zur Abbildung eines Regionskriteriums\n\n.. raw:: html\n\n \n\n.. HINT::\n `Regionskriterium JSON Schema `_",
+ "title": "Regionskriterium",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gueltigkeitstyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Gueltigkeitstyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "regionskriteriumtyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Regionskriteriumtyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Rufnummer.json b/unittests/test_data/bo4e_schemas/com/Rufnummer.json
new file mode 100644
index 0000000..c95f2b1
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Rufnummer.json
@@ -0,0 +1,55 @@
+{
+ "description": "Contains information to call or fax someone\n\n.. raw:: html\n\n \n\n.. HINT::\n `Rufnummer JSON Schema `_",
+ "title": "Rufnummer",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "nummerntyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Rufnummernart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "rufnummer": {
+ "title": "Rufnummer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Sigmoidparameter.json b/unittests/test_data/bo4e_schemas/com/Sigmoidparameter.json
new file mode 100644
index 0000000..a7a9dc7
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Sigmoidparameter.json
@@ -0,0 +1,92 @@
+{
+ "description": "Die Sigmoid-Funktion, beispielsweise zur Berechnung eines Leistungspreises hat die Form:\nLP=A/(1+(P/B)^C)+D\n\n.. raw:: html\n\n \n\n.. HINT::\n `Sigmoidparameter JSON Schema `_",
+ "title": "Sigmoidparameter",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "A": {
+ "title": "A",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "B": {
+ "title": "B",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "C": {
+ "title": "C",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "D": {
+ "title": "D",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/StandorteigenschaftenGas.json b/unittests/test_data/bo4e_schemas/com/StandorteigenschaftenGas.json
new file mode 100644
index 0000000..c31e45c
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/StandorteigenschaftenGas.json
@@ -0,0 +1,62 @@
+{
+ "description": "Standorteigenschaften der Sparte Gas\n\n.. raw:: html\n\n \n\n.. HINT::\n `StandorteigenschaftenGas JSON Schema `_",
+ "title": "StandorteigenschaftenGas",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktgebiete": {
+ "title": "Marktgebiete",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "MarktgebietInfo.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netzkontonummern": {
+ "title": "Netzkontonummern",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/StandorteigenschaftenStrom.json b/unittests/test_data/bo4e_schemas/com/StandorteigenschaftenStrom.json
new file mode 100644
index 0000000..2326ce9
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/StandorteigenschaftenStrom.json
@@ -0,0 +1,68 @@
+{
+ "description": "Standorteigenschaften der Sparte Strom\n\n.. raw:: html\n\n \n\n.. HINT::\n `StandorteigenschaftenStrom JSON Schema `_",
+ "title": "StandorteigenschaftenStrom",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bilanzierungsgebietEic": {
+ "title": "Bilanzierungsgebieteic",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "regelzone": {
+ "title": "Regelzone",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "regelzoneEic": {
+ "title": "Regelzoneeic",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Steuerbetrag.json b/unittests/test_data/bo4e_schemas/com/Steuerbetrag.json
new file mode 100644
index 0000000..a311c22
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Steuerbetrag.json
@@ -0,0 +1,84 @@
+{
+ "description": "Abbildung eines Steuerbetrages.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Steuerbetrag JSON Schema `_",
+ "title": "Steuerbetrag",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "basiswert": {
+ "title": "Basiswert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "steuerkennzeichen": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Steuerkennzeichen.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "steuerwert": {
+ "title": "Steuerwert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "waehrung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungscode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Tagesvektor.json b/unittests/test_data/bo4e_schemas/com/Tagesvektor.json
new file mode 100644
index 0000000..e8238ab
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Tagesvektor.json
@@ -0,0 +1,60 @@
+{
+ "description": "Abbildung eines Tagesvektors eines beliebigen äquidistanten Zeitrasters\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tagesvektor JSON Schema `_",
+ "title": "Tagesvektor",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "tag": {
+ "title": "Tag",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "werte": {
+ "title": "Werte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Zeitreihenwertkompakt.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Tarifberechnungsparameter.json b/unittests/test_data/bo4e_schemas/com/Tarifberechnungsparameter.json
new file mode 100644
index 0000000..6b655c8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Tarifberechnungsparameter.json
@@ -0,0 +1,156 @@
+{
+ "description": "In dieser Komponente sind die Berechnungsparameter für die Ermittlung der Tarifkosten zusammengefasst.\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifberechnungsparameter JSON Schema `_",
+ "title": "Tarifberechnungsparameter",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "berechnungsmethode": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Tarifkalkulationsmethode.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "hoechstpreisHT": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "hoechstpreisNT": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istMesspreisInGrundpreisEnthalten": {
+ "title": "Istmesspreisingrundpreisenthalten",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istMesspreisZuBeruecksichtigen": {
+ "title": "Istmesspreiszuberuecksichtigen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kwInklusive": {
+ "title": "Kwinklusive",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kwWeitereMengen": {
+ "title": "Kwweiteremengen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "messpreistyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messpreistyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "mindestpreis": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Preis.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zusatzpreise": {
+ "title": "Zusatzpreise",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Tarifpreis.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Tarifeinschraenkung.json b/unittests/test_data/bo4e_schemas/com/Tarifeinschraenkung.json
new file mode 100644
index 0000000..88c7a3b
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Tarifeinschraenkung.json
@@ -0,0 +1,92 @@
+{
+ "description": "Mit dieser Komponente werden Einschränkungen für die Anwendung von Tarifen modelliert.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifeinschraenkung JSON Schema `_",
+ "title": "Tarifeinschraenkung",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einschraenkungleistung": {
+ "title": "Einschraenkungleistung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Menge.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einschraenkungzaehler": {
+ "title": "Einschraenkungzaehler",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../bo/Geraet.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "voraussetzungen": {
+ "title": "Voraussetzungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Voraussetzungen.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zusatzprodukte": {
+ "title": "Zusatzprodukte",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Tarifpreis.json b/unittests/test_data/bo4e_schemas/com/Tarifpreis.json
new file mode 100644
index 0000000..215a79e
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Tarifpreis.json
@@ -0,0 +1,103 @@
+{
+ "description": "Abbildung eines Tarifpreises mit Preistyp und Beschreibung abgeleitet von COM Preis.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifpreis JSON Schema `_",
+ "title": "Tarifpreis",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezugswert": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preistyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preistyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "status": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preisstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Tarifpreisposition.json b/unittests/test_data/bo4e_schemas/com/Tarifpreisposition.json
new file mode 100644
index 0000000..543c40b
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Tarifpreisposition.json
@@ -0,0 +1,91 @@
+{
+ "description": "Mit dieser Komponente können Tarifpreise verschiedener Typen abgebildet werden.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Tarifpreisposition JSON Schema `_",
+ "title": "Tarifpreisposition",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezugseinheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waehrungseinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "mengeneinheitstaffel": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstaffeln": {
+ "title": "Preisstaffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "Preisstaffel.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preistyp": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Preistyp.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/TarifpreispositionProOrt.json b/unittests/test_data/bo4e_schemas/com/TarifpreispositionProOrt.json
new file mode 100644
index 0000000..04fabdd
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/TarifpreispositionProOrt.json
@@ -0,0 +1,83 @@
+{
+ "description": "Mit dieser Komponente können Tarifpreise verschiedener Typen abgebildet werden\n\n.. raw:: html\n\n \n\n.. HINT::\n `TarifpreispositionProOrt JSON Schema `_",
+ "title": "TarifpreispositionProOrt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "netznr": {
+ "title": "Netznr",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ort": {
+ "title": "Ort",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "postleitzahl": {
+ "title": "Postleitzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "preisstaffeln": {
+ "title": "Preisstaffeln",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "TarifpreisstaffelProOrt.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/TarifpreisstaffelProOrt.json b/unittests/test_data/bo4e_schemas/com/TarifpreisstaffelProOrt.json
new file mode 100644
index 0000000..f964b27
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/TarifpreisstaffelProOrt.json
@@ -0,0 +1,107 @@
+{
+ "description": "Gibt die Staffelgrenzen der jeweiligen Preise an\n\n.. raw:: html\n\n \n\n.. HINT::\n `TarifpreisstaffelProOrt JSON Schema `_",
+ "title": "TarifpreisstaffelProOrt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "arbeitspreis": {
+ "title": "Arbeitspreis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "arbeitspreisNT": {
+ "title": "Arbeitspreisnt",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "grundpreis": {
+ "title": "Grundpreis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeBis": {
+ "title": "Staffelgrenzebis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "staffelgrenzeVon": {
+ "title": "Staffelgrenzevon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Unterschrift.json b/unittests/test_data/bo4e_schemas/com/Unterschrift.json
new file mode 100644
index 0000000..1a91bb9
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Unterschrift.json
@@ -0,0 +1,69 @@
+{
+ "description": "Modellierung einer Unterschrift, z.B. für Verträge, Angebote etc.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Unterschrift JSON Schema `_",
+ "title": "Unterschrift",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "datum": {
+ "title": "Datum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name": {
+ "title": "Name",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ort": {
+ "title": "Ort",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Verbrauch.json b/unittests/test_data/bo4e_schemas/com/Verbrauch.json
new file mode 100644
index 0000000..d1ab604
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Verbrauch.json
@@ -0,0 +1,107 @@
+{
+ "description": "Abbildung eines zeitlich abgegrenzten Verbrauchs\n\n.. raw:: html\n\n \n\n.. HINT::\n `Verbrauch JSON Schema `_",
+ "title": "Verbrauch",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "enddatum": {
+ "title": "Enddatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "obisKennzahl": {
+ "title": "Obiskennzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startdatum": {
+ "title": "Startdatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wertermittlungsverfahren": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Wertermittlungsverfahren.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Vertragskonditionen.json b/unittests/test_data/bo4e_schemas/com/Vertragskonditionen.json
new file mode 100644
index 0000000..436d5ff
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Vertragskonditionen.json
@@ -0,0 +1,103 @@
+{
+ "description": "Abbildung für Vertragskonditionen. Die Komponente wird sowohl im Vertrag als auch im Tarif verwendet.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Vertragskonditionen JSON Schema `_",
+ "title": "Vertragskonditionen",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "abschlagszyklus": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anzahlAbschlaege": {
+ "title": "Anzahlabschlaege",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "beschreibung": {
+ "title": "Beschreibung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "kuendigungsfrist": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragslaufzeit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsverlaengerung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zeitraum.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Vertragsteil.json b/unittests/test_data/bo4e_schemas/com/Vertragsteil.json
new file mode 100644
index 0000000..6c43703
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Vertragsteil.json
@@ -0,0 +1,103 @@
+{
+ "description": "Abbildung für einen Vertragsteil. Der Vertragsteil wird dazu verwendet,\neine vertragliche Leistung in Bezug zu einer Lokation (Markt- oder Messlokation) festzulegen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Vertragsteil JSON Schema `_",
+ "title": "Vertragsteil",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "lokation": {
+ "title": "Lokation",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "maximaleAbnahmemenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "minimaleAbnahmemenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertraglichFixierteMenge": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Menge.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsteilbeginn": {
+ "title": "Vertragsteilbeginn",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vertragsteilende": {
+ "title": "Vertragsteilende",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/VerwendungszweckProMarktrolle.json b/unittests/test_data/bo4e_schemas/com/VerwendungszweckProMarktrolle.json
new file mode 100644
index 0000000..3a8fa47
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/VerwendungszweckProMarktrolle.json
@@ -0,0 +1,58 @@
+{
+ "description": "Dient zur Identifizierung des Verwendungszwecks der Marktrolle an der Marktlokation, der die Werte zu übermitteln sind.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Verwendungszweck JSON Schema `_",
+ "title": "VerwendungszweckProMarktrolle",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "marktrolle": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Marktrolle.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zwecke": {
+ "title": "Zwecke",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "../enum/Verwendungszweck.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zaehlwerk.json b/unittests/test_data/bo4e_schemas/com/Zaehlwerk.json
new file mode 100644
index 0000000..8f3fde8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zaehlwerk.json
@@ -0,0 +1,248 @@
+{
+ "description": "Mit dieser Komponente werden Zählwerke modelliert.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zaehlwerk JSON Schema `_",
+ "title": "Zaehlwerk",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "anzahlAblesungen": {
+ "title": "Anzahlablesungen",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "bezeichnung": {
+ "title": "Bezeichnung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Mengeneinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istAbrechnungsrelevant": {
+ "title": "Istabrechnungsrelevant",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istSchwachlastfaehig": {
+ "title": "Istschwachlastfaehig",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istSteuerbefreit": {
+ "title": "Iststeuerbefreit",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istUnterbrechbar": {
+ "title": "Istunterbrechbar",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "konzessionsabgabe": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Konzessionsabgabe.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "nachkommastelle": {
+ "title": "Nachkommastelle",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "obisKennzahl": {
+ "title": "Obiskennzahl",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "richtung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Energierichtung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "verbrauchsart": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Verbrauchsart.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "verwendungszwecke": {
+ "title": "Verwendungszwecke",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "VerwendungszweckProMarktrolle.json#"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "vorkommastelle": {
+ "title": "Vorkommastelle",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "waermenutzung": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Waermenutzung.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wandlerfaktor": {
+ "title": "Wandlerfaktor",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlwerkId": {
+ "title": "Zaehlwerkid",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlzeitregister": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "Zaehlzeitregister.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zaehlzeitregister.json b/unittests/test_data/bo4e_schemas/com/Zaehlzeitregister.json
new file mode 100644
index 0000000..e89e167
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zaehlzeitregister.json
@@ -0,0 +1,68 @@
+{
+ "description": "Mit dieser Komponente werden Zählzeitregister modelliert. Ein Zählzeitregister beschreibt eine erweiterte Definition der Zählzeit\nin Bezug auf ein Register. Dabei werden alle Codes dazu vom Netzbetreiber vergeben.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zaehlzeitregister JSON Schema `_",
+ "title": "Zaehlzeitregister",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "istSchwachlastfaehig": {
+ "title": "Istschwachlastfaehig",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlzeitDefinition": {
+ "title": "Zaehlzeitdefinition",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zaehlzeitRegister": {
+ "title": "Zaehlzeitregister",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zeitintervall.json b/unittests/test_data/bo4e_schemas/com/Zeitintervall.json
new file mode 100644
index 0000000..fd78939
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zeitintervall.json
@@ -0,0 +1,55 @@
+{
+ "description": "Abbildung für ein Zeitintervall. Die Abbildung eines Zeitintervalls.\nZ.B. zur Anwendung als Raster in äquidistanten Zeitreihen/Lastgängen, beispielsweise 15 Minuten.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zeitintervall JSON Schema `_",
+ "title": "Zeitintervall",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "zeiteinheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zeiteinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zeitraum.json b/unittests/test_data/bo4e_schemas/com/Zeitraum.json
new file mode 100644
index 0000000..8406d45
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zeitraum.json
@@ -0,0 +1,110 @@
+{
+ "description": "Diese Komponente wird zur Abbildung von Zeiträumen in Form von Dauern oder der Angabe von Start und Ende verwendet.\nEs muss daher eine der drei Möglichkeiten angegeben sein:\n- Einheit und Dauer oder\n- Zeitraum: Startdatum bis Enddatum oder\n- Zeitraum: Startzeitpunkt (Datum und Uhrzeit) bis Endzeitpunkt (Datum und Uhrzeit)\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zeitraum JSON Schema `_",
+ "title": "Zeitraum",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "dauer": {
+ "title": "Dauer",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "einheit": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Zeiteinheit.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "enddatum": {
+ "title": "Enddatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "endzeitpunkt": {
+ "title": "Endzeitpunkt",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startdatum": {
+ "title": "Startdatum",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startzeitpunkt": {
+ "title": "Startzeitpunkt",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zeitreihenwert.json b/unittests/test_data/bo4e_schemas/com/Zeitreihenwert.json
new file mode 100644
index 0000000..e2b1518
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zeitreihenwert.json
@@ -0,0 +1,95 @@
+{
+ "description": "Abbildung eines Zeitreihenwertes bestehend aus Zeitraum, Wert und Statusinformationen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zeitreihenwert JSON Schema `_",
+ "title": "Zeitreihenwert",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "datumUhrzeitBis": {
+ "title": "Datumuhrzeitbis",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "datumUhrzeitVon": {
+ "title": "Datumuhrzeitvon",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "status": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messwertstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "statuszusatz": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messwertstatuszusatz.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zeitreihenwertkompakt.json b/unittests/test_data/bo4e_schemas/com/Zeitreihenwertkompakt.json
new file mode 100644
index 0000000..6066f27
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zeitreihenwertkompakt.json
@@ -0,0 +1,69 @@
+{
+ "description": "Abbildung eines kompakten Zeitreihenwertes in dem ausschliesslich der Wert und Statusinformationen stehen.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zeitreihenwertkompakt JSON Schema `_",
+ "title": "Zeitreihenwertkompakt",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "status": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messwertstatus.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "statuszusatz": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Messwertstatuszusatz.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "wert": {
+ "title": "Wert",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/com/Zustaendigkeit.json b/unittests/test_data/bo4e_schemas/com/Zustaendigkeit.json
new file mode 100644
index 0000000..affb765
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/com/Zustaendigkeit.json
@@ -0,0 +1,67 @@
+{
+ "description": "Enthält die zeitliche Zuordnung eines Ansprechpartners zu Abteilungen und Zuständigkeiten.\n\n.. raw:: html\n\n \n\n.. HINT::\n `Zustaendigkeit JSON Schema `_",
+ "title": "Zustaendigkeit",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "_id": {
+ "title": " Id",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_version": {
+ "title": " Version",
+ "default": "0.6.1rc13",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "abteilung": {
+ "title": "Abteilung",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "jobtitel": {
+ "title": "Jobtitel",
+ "default": null,
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "themengebiet": {
+ "default": null,
+ "anyOf": [
+ {
+ "$ref": "../enum/Themengebiet.json#"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/AbgabeArt.json b/unittests/test_data/bo4e_schemas/enum/AbgabeArt.json
new file mode 100644
index 0000000..4aa21b4
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/AbgabeArt.json
@@ -0,0 +1,16 @@
+{
+ "description": "Art der Konzessionsabgabe",
+ "title": "AbgabeArt",
+ "type": "string",
+ "enum": [
+ "KAS",
+ "SA",
+ "SAS",
+ "TA",
+ "TAS",
+ "TK",
+ "TKS",
+ "TS",
+ "TSS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Angebotsstatus.json b/unittests/test_data/bo4e_schemas/enum/Angebotsstatus.json
new file mode 100644
index 0000000..6965b07
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Angebotsstatus.json
@@ -0,0 +1,16 @@
+{
+ "description": "Gibt den Status eines Angebotes an.",
+ "title": "Angebotsstatus",
+ "type": "string",
+ "enum": [
+ "KONZEPTION",
+ "UNVERBINDLICH",
+ "VERBINDLICH",
+ "BEAUFTRAGT",
+ "UNGUELTIG",
+ "ABGELEHNT",
+ "NACHGEFASST",
+ "AUSSTEHEND",
+ "ERLEDIGT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Anrede.json b/unittests/test_data/bo4e_schemas/enum/Anrede.json
new file mode 100644
index 0000000..7db4d5c
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Anrede.json
@@ -0,0 +1,12 @@
+{
+ "description": "Übersicht möglicher Anreden, z.B. eines Geschäftspartners.",
+ "title": "Anrede",
+ "type": "string",
+ "enum": [
+ "HERR",
+ "FRAU",
+ "EHELEUTE",
+ "FIRMA",
+ "INDIVIDUELL"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/ArithmetischeOperation.json b/unittests/test_data/bo4e_schemas/enum/ArithmetischeOperation.json
new file mode 100644
index 0000000..6421d9a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/ArithmetischeOperation.json
@@ -0,0 +1,11 @@
+{
+ "description": "Mit dieser Aufzählung können arithmetische Operationen festgelegt werden.",
+ "title": "ArithmetischeOperation",
+ "type": "string",
+ "enum": [
+ "ADDITION",
+ "SUBTRAKTION",
+ "MULTIPLIKATION",
+ "DIVISION"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/ArtikelId.json b/unittests/test_data/bo4e_schemas/enum/ArtikelId.json
new file mode 100644
index 0000000..1d59fb8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/ArtikelId.json
@@ -0,0 +1,15 @@
+{
+ "description": "Liste von Artikel-IDs, z.B. für standardisierte vom BDEW herausgegebene Artikel,\ndie im Strommarkt die BDEW-Artikelnummer ablösen",
+ "title": "ArtikelId",
+ "type": "string",
+ "enum": [
+ "2-01-7-001",
+ "2-01-7-002",
+ "2-01-7-003",
+ "2-01-7-004",
+ "2-01-7-005",
+ "2-01-7-006",
+ "2-02-0-001",
+ "2-02-0-002"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/AufAbschlagstyp.json b/unittests/test_data/bo4e_schemas/enum/AufAbschlagstyp.json
new file mode 100644
index 0000000..7feb6ad
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/AufAbschlagstyp.json
@@ -0,0 +1,9 @@
+{
+ "description": "Festlegung, ob der Auf- oder Abschlag mit relativen oder absoluten Werten erfolgt.",
+ "title": "AufAbschlagstyp",
+ "type": "string",
+ "enum": [
+ "RELATIV",
+ "ABSOLUT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/AufAbschlagsziel.json b/unittests/test_data/bo4e_schemas/enum/AufAbschlagsziel.json
new file mode 100644
index 0000000..1f0f10a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/AufAbschlagsziel.json
@@ -0,0 +1,13 @@
+{
+ "description": "Der Preis, auf den sich ein Auf- oder Abschlag bezieht.",
+ "title": "AufAbschlagsziel",
+ "type": "string",
+ "enum": [
+ "ARBEITSPREIS_EINTARIF",
+ "ARBEITSPREIS_HT",
+ "ARBEITSPREIS_NT",
+ "ARBEITSPREIS_HT_NT",
+ "GRUNDPREIS",
+ "GESAMTPREIS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Ausschreibungsportal.json b/unittests/test_data/bo4e_schemas/enum/Ausschreibungsportal.json
new file mode 100644
index 0000000..a859e95
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Ausschreibungsportal.json
@@ -0,0 +1,17 @@
+{
+ "description": "Aufzählung der unterstützten Ausschreibungsportale.",
+ "title": "Ausschreibungsportal",
+ "type": "string",
+ "enum": [
+ "ENPORTAL",
+ "ENERGIE_AGENTUR",
+ "BMWI",
+ "ENERGIE_HANDELSPLATZ",
+ "BUND",
+ "VERA_ONLINE",
+ "ISPEX",
+ "ENERGIEMARKTPLATZ",
+ "EVERGABE",
+ "DTAD"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Ausschreibungsstatus.json b/unittests/test_data/bo4e_schemas/enum/Ausschreibungsstatus.json
new file mode 100644
index 0000000..d743577
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Ausschreibungsstatus.json
@@ -0,0 +1,11 @@
+{
+ "description": "Bezeichnungen für die Ausschreibungsphasen",
+ "title": "Ausschreibungsstatus",
+ "type": "string",
+ "enum": [
+ "PHASE1",
+ "PHASE2",
+ "PHASE3",
+ "PHASE4"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Ausschreibungstyp.json b/unittests/test_data/bo4e_schemas/enum/Ausschreibungstyp.json
new file mode 100644
index 0000000..5355114
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Ausschreibungstyp.json
@@ -0,0 +1,10 @@
+{
+ "description": "Aufzählung für die Typisierung von Ausschreibungen.",
+ "title": "Ausschreibungstyp",
+ "type": "string",
+ "enum": [
+ "PRIVATRECHTLICH",
+ "OEFFENTLICHRECHTLICH",
+ "EUROPAWEIT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/BDEWArtikelnummer.json b/unittests/test_data/bo4e_schemas/enum/BDEWArtikelnummer.json
new file mode 100644
index 0000000..bd3d668
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/BDEWArtikelnummer.json
@@ -0,0 +1,53 @@
+{
+ "description": "BDEW Artikelnummern",
+ "title": "BDEWArtikelnummer",
+ "type": "string",
+ "enum": [
+ "LEISTUNG",
+ "LEISTUNG_PAUSCHAL",
+ "GRUNDPREIS",
+ "REGELENERGIE_ARBEIT",
+ "REGELENERGIE_LEISTUNG",
+ "NOTSTROMLIEFERUNG_ARBEIT",
+ "NOTSTROMLIEFERUNG_LEISTUNG",
+ "RESERVENETZKAPAZITAET",
+ "RESERVELEISTUNG",
+ "ZUSAETZLICHE_ABLESUNG",
+ "PRUEFGEBUEHREN_AUSSERPLANMAESSIG",
+ "WIRKARBEIT",
+ "SINGULAER_GENUTZTE_BETRIEBSMITTEL",
+ "ABGABE_KWKG",
+ "ABSCHLAG",
+ "KONZESSIONSABGABE",
+ "ENTGELT_FERNAUSLESUNG",
+ "UNTERMESSUNG",
+ "BLINDMEHRARBEIT",
+ "ENTGELT_ABRECHNUNG",
+ "SPERRKOSTEN",
+ "ENTSPERRKOSTEN",
+ "MAHNKOSTEN",
+ "MEHR_MINDERMENGEN",
+ "INKASSOKOSTEN",
+ "BLINDMEHRLEISTUNG",
+ "ENTGELT_MESSUNG_ABLESUNG",
+ "ENTGELT_EINBAU_BETRIEB_WARTUNG_MESSTECHNIK",
+ "AUSGLEICHSENERGIE",
+ "ZAEHLEINRICHTUNG",
+ "WANDLER_MENGENUMWERTER",
+ "KOMMUNIKATIONSEINRICHTUNG",
+ "TECHNISCHE_STEUEREINRICHTUNG",
+ "PARAGRAF_19_STROM_NEV_UMLAGE",
+ "BEFESTIGUNGSEINRICHTUNG",
+ "OFFSHORE_HAFTUNGSUMLAGE",
+ "FIXE_ARBEITSENTGELTKOMPONENTE",
+ "FIXE_LEISTUNGSENTGELTKOMPONENTE",
+ "UMLAGE_ABSCHALTBARE_LASTEN",
+ "MEHRMENGE",
+ "MINDERMENGE",
+ "ENERGIESTEUER",
+ "SMARTMETER_GATEWAY",
+ "STEUERBOX",
+ "MSB_INKL_MESSUNG",
+ "AUSGLEICHSENERGIE_UNTERDECKUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Befestigungsart.json b/unittests/test_data/bo4e_schemas/enum/Befestigungsart.json
new file mode 100644
index 0000000..557acad
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Befestigungsart.json
@@ -0,0 +1,12 @@
+{
+ "description": "Befestigungsart von Zählern",
+ "title": "Befestigungsart",
+ "type": "string",
+ "enum": [
+ "STECKTECHNIK",
+ "DREIPUNKT",
+ "HUTSCHIENE",
+ "EINSTUTZEN",
+ "ZWEISTUTZEN"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Bemessungsgroesse.json b/unittests/test_data/bo4e_schemas/enum/Bemessungsgroesse.json
new file mode 100644
index 0000000..9fe1043
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Bemessungsgroesse.json
@@ -0,0 +1,19 @@
+{
+ "description": "Zur Abbildung von Messgrössen und zur Verwendung in energiewirtschaftlichen Berechnungen.",
+ "title": "Bemessungsgroesse",
+ "type": "string",
+ "enum": [
+ "WIRKARBEIT_EL",
+ "LEISTUNG_EL",
+ "BLINDARBEIT_KAP",
+ "BLINDARBEIT_IND",
+ "BLINDLEISTUNG_KAP",
+ "BLINDLEISTUNG_IND",
+ "WIRKARBEIT_TH",
+ "LEISTUNG_TH",
+ "VOLUMEN",
+ "VOLUMENSTROM",
+ "BENUTZUNGSDAUER",
+ "ANZAHL"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Bilanzierungsmethode.json b/unittests/test_data/bo4e_schemas/enum/Bilanzierungsmethode.json
new file mode 100644
index 0000000..fb6e497
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Bilanzierungsmethode.json
@@ -0,0 +1,12 @@
+{
+ "description": "Mit dieser Aufzählung kann zwischen den Bilanzierungsmethoden bzw. -grundlagen unterschieden werden.",
+ "title": "Bilanzierungsmethode",
+ "type": "string",
+ "enum": [
+ "RLM",
+ "SLP",
+ "TLP_GEMEINSAM",
+ "TLP_GETRENNT",
+ "PAUSCHAL"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Dienstleistungstyp.json b/unittests/test_data/bo4e_schemas/enum/Dienstleistungstyp.json
new file mode 100644
index 0000000..2a9b3c4
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Dienstleistungstyp.json
@@ -0,0 +1,42 @@
+{
+ "description": "Auflistung möglicher abzurechnender Dienstleistungen.",
+ "title": "Dienstleistungstyp",
+ "type": "string",
+ "enum": [
+ "DATENBEREITSTELLUNG_TAEGLICH",
+ "DATENBEREITSTELLUNG_WOECHENTLICH",
+ "DATENBEREITSTELLUNG_MONATLICH",
+ "DATENBEREITSTELLUNG_JAEHRLICH",
+ "DATENBEREITSTELLUNG_HISTORISCHE_LG",
+ "DATENBEREITSTELLUNG_STUENDLICH",
+ "DATENBEREITSTELLUNG_VIERTELJAEHRLICH",
+ "DATENBEREITSTELLUNG_HALBJAEHRLICH",
+ "DATENBEREITSTELLUNG_MONATLICH_ZUSAETZLICH",
+ "DATENBEREITSTELLUNG_EINMALIG",
+ "AUSLESUNG_2X_TAEGLICH_FERNAUSLESUNG",
+ "AUSLESUNG_TAEGLICH_FERNAUSLESUNG",
+ "AUSLESUNG_MANUELL_MSB",
+ "AUSLESUNG_MONATLICH_FERNAUSLESUNG",
+ "AUSLESUNG_JAEHRLICH_FERNAUSLESUNG",
+ "AUSLESUNG_MDE",
+ "ABLESUNG_MONATLICH",
+ "ABLESUNG_VIERTELJAEHRLICH",
+ "ABLESUNG_HALBJAEHRLICH",
+ "ABLESUNG_JAEHRLICH",
+ "AUSLESUNG_FERNAUSLESUNG",
+ "ABLESUNG_ZUSAETZLICH_MSB",
+ "ABLESUNG_ZUSAETZLICH_KUNDE",
+ "AUSLESUNG_FERNAUSLESUNG_ZUSAETZLICH_MSB",
+ "AUSLESUNG_MOATLICH_FERNAUSLESUNG",
+ "AUSLESUNG_STUENDLICH_FERNAUSLESUNG",
+ "AUSLESUNG_TEMPERATURMENGENUMWERTER",
+ "AUSLESUNG_ZUSTANDSMENGENUMWERTER",
+ "AUSLESUNG_SYSTEMMENGENUMWERTER",
+ "AUSLESUNG_VORGANG",
+ "AUSLESUNG_KOMPAKTMENGENUMWERTER",
+ "SPERRUNG",
+ "ENTSPERRUNG",
+ "MAHNKOSTEN",
+ "INKASSOKOSTEN"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Energierichtung.json b/unittests/test_data/bo4e_schemas/enum/Energierichtung.json
new file mode 100644
index 0000000..f6acdda
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Energierichtung.json
@@ -0,0 +1,9 @@
+{
+ "description": "Spezifiziert die Energierichtung einer Markt- und/oder Messlokation",
+ "title": "Energierichtung",
+ "type": "string",
+ "enum": [
+ "AUSSP",
+ "EINSP"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Erzeugungsart.json b/unittests/test_data/bo4e_schemas/enum/Erzeugungsart.json
new file mode 100644
index 0000000..892e24a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Erzeugungsart.json
@@ -0,0 +1,21 @@
+{
+ "description": "Auflistung der Erzeugungsarten von Energie.",
+ "title": "Erzeugungsart",
+ "type": "string",
+ "enum": [
+ "FOSSIL",
+ "KWK",
+ "WIND",
+ "SOLAR",
+ "KERNKRAFT",
+ "WASSER",
+ "GEOTHERMIE",
+ "BIOMASSE",
+ "KOHLE",
+ "GAS",
+ "SONSTIGE",
+ "SONSTIGE_EEG",
+ "BIOGAS",
+ "KLIMANEUTRALES_GAS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Gasqualitaet.json b/unittests/test_data/bo4e_schemas/enum/Gasqualitaet.json
new file mode 100644
index 0000000..5f1e064
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Gasqualitaet.json
@@ -0,0 +1,9 @@
+{
+ "description": "Unterscheidung für hoch- und niedrig-kalorisches Gas.",
+ "title": "Gasqualitaet",
+ "type": "string",
+ "enum": [
+ "H_GAS",
+ "L_GAS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Gebiettyp.json b/unittests/test_data/bo4e_schemas/enum/Gebiettyp.json
new file mode 100644
index 0000000..cd37148
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Gebiettyp.json
@@ -0,0 +1,16 @@
+{
+ "description": "List of possible Gebiettypen.",
+ "title": "Gebiettyp",
+ "type": "string",
+ "enum": [
+ "REGELZONE",
+ "MARKTGEBIET",
+ "BILANZIERUNGSGEBIET",
+ "VERTEILNETZ",
+ "TRANSPORTNETZ",
+ "REGIONALNETZ",
+ "AREALNETZ",
+ "GRUNDVERSORGUNGSGEBIET",
+ "VERSORGUNGSGEBIET"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Geraeteklasse.json b/unittests/test_data/bo4e_schemas/enum/Geraeteklasse.json
new file mode 100644
index 0000000..eb83d14
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Geraeteklasse.json
@@ -0,0 +1,14 @@
+{
+ "description": "Auflistung möglicher übergreifenden Geräteklassen.",
+ "title": "Geraeteklasse",
+ "type": "string",
+ "enum": [
+ "WANDLER",
+ "KOMMUNIKATIONSEINRICHTUNG",
+ "TECHNISCHE_STEUEREINRICHTUNG",
+ "MENGENUMWERTER",
+ "SMARTMETER_GATEWAY",
+ "STEUERBOX",
+ "ZAEHLEINRICHTUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Geraetetyp.json b/unittests/test_data/bo4e_schemas/enum/Geraetetyp.json
new file mode 100644
index 0000000..0312615
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Geraetetyp.json
@@ -0,0 +1,53 @@
+{
+ "description": "Auflistung möglicher abzurechnender Gerätetypen.",
+ "title": "Geraetetyp",
+ "type": "string",
+ "enum": [
+ "MULTIPLEXANLAGE",
+ "PAUSCHALANLAGE",
+ "VERSTAERKERANLAGE",
+ "SUMMATIONSGERAET",
+ "IMPULSGEBER",
+ "MENGENUMWERTER",
+ "STROMWANDLER",
+ "SPANNUNGSWANDLER",
+ "KOMBIMESSWANDLER",
+ "BLOCKSTROMWANDLER",
+ "DATENLOGGER",
+ "KOMMUNIKATIONSANSCHLUSS",
+ "MODEM",
+ "TELEKOMMUNIKATIONSEINRICHTUNG",
+ "MODERNE_MESSEINRICHTUNG",
+ "INTELLIGENTES_MESSYSTEM",
+ "STEUEREINRICHTUNG",
+ "TARIFSCHALTGERAET",
+ "RUNDSTEUEREMPFAENGER",
+ "OPTIONALE_ZUS_ZAEHLEINRICHTUNG",
+ "MESSWANDLERSATZ_IMS_MME",
+ "KOMBIMESSWANDLER_IMS_MME",
+ "TARIFSCHALTGERAET_IMS_MME",
+ "RUNDSTEUEREMPFAENGER_IMS_MME",
+ "TEMPERATUR_KOMPENSATION",
+ "HOECHSTBELASTUNGS_ANZEIGER",
+ "SONSTIGES_GERAET",
+ "EDL_21",
+ "EDL_40_ZAEHLERAUFSATZ",
+ "EDL_40",
+ "TELEFONANSCHLUSS",
+ "MODEM_GSM",
+ "MODEM_GPRS",
+ "MODEM_FUNK",
+ "MODEM_GSM_O_LG",
+ "MODEM_GSM_M_LG",
+ "MODEM_FESTNETZ",
+ "MODEM_GPRS_M_LG",
+ "PLC_KOM",
+ "ETHERNET_KOM",
+ "DSL_KOM",
+ "LTE_KOM",
+ "KOMPAKT_MU",
+ "SYSTEM_MU",
+ "TEMPERATUR_MU",
+ "ZUSTANDS_MU"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Geschaeftspartnerrolle.json b/unittests/test_data/bo4e_schemas/enum/Geschaeftspartnerrolle.json
new file mode 100644
index 0000000..a376931
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Geschaeftspartnerrolle.json
@@ -0,0 +1,12 @@
+{
+ "description": "Diese Rollen kann ein Geschäftspartner einnehmen.",
+ "title": "Geschaeftspartnerrolle",
+ "type": "string",
+ "enum": [
+ "LIEFERANT",
+ "DIENSTLEISTER",
+ "KUNDE",
+ "INTERESSENT",
+ "MARKTPARTNER"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Gueltigkeitstyp.json b/unittests/test_data/bo4e_schemas/enum/Gueltigkeitstyp.json
new file mode 100644
index 0000000..ca7abc6
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Gueltigkeitstyp.json
@@ -0,0 +1,10 @@
+{
+ "description": "Übersicht der verschiedenen Gültigkeiten zur Umsetzung von Positiv- bzw. Negativlisten.",
+ "title": "Gueltigkeitstyp",
+ "type": "string",
+ "enum": [
+ "NUR_IN",
+ "NICHT_IN",
+ "NUR_IN_KOMBINATION_MIT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Kalkulationsmethode.json b/unittests/test_data/bo4e_schemas/enum/Kalkulationsmethode.json
new file mode 100644
index 0000000..8625d82
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Kalkulationsmethode.json
@@ -0,0 +1,23 @@
+{
+ "description": "Auflistung der verschiedenen Berechnungsmethoden für ein Preisblatt.",
+ "title": "Kalkulationsmethode",
+ "type": "string",
+ "enum": [
+ "STUFEN",
+ "ZONEN",
+ "VORZONEN_GP",
+ "SIGMOID",
+ "BLINDARBEIT_GT_50_PROZENT",
+ "BLINDARBEIT_GT_40_PROZENT",
+ "BLINDARBEIT_MIT_FREIMENGE",
+ "AP_GP_ZONEN",
+ "LP_INSTALL_LEISTUNG",
+ "AP_TRANSPORT_ODER_VERTEILNETZ",
+ "AP_TRANSPORT_ODER_VERTEILNETZ_ORTSVERTEILNETZ_SIGMOID",
+ "LP_JAHRESVERBRAUCH",
+ "LP_TRANSPORT_ODER_VERTEILNETZ",
+ "LP_TRANSPORT_ODER_VERTEILNETZ_ORTSVERTEILNETZ_SIGMOID",
+ "FUNKTIONEN",
+ "VERBRAUCH_UEBER_SLP_GRENZE_FUNKTIONSBEZOGEN_WEITERE_BERECHNUNG_ALS_LGK"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Kontaktart.json b/unittests/test_data/bo4e_schemas/enum/Kontaktart.json
new file mode 100644
index 0000000..4ca5872
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Kontaktart.json
@@ -0,0 +1,12 @@
+{
+ "description": "Art des Kontaktes zwischen Geschäftspartnern.",
+ "title": "Kontaktart",
+ "type": "string",
+ "enum": [
+ "ANSCHREIBEN",
+ "TELEFONAT",
+ "FAX",
+ "E_MAIL",
+ "SMS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Kostenklasse.json b/unittests/test_data/bo4e_schemas/enum/Kostenklasse.json
new file mode 100644
index 0000000..b6e377f
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Kostenklasse.json
@@ -0,0 +1,12 @@
+{
+ "description": "Kostenklassen bilden die oberste Ebene der verschiedenen Kosten.\nIn der Regel werden die Gesamtkosten einer Kostenklasse in einer App berechnet.",
+ "title": "Kostenklasse",
+ "type": "string",
+ "enum": [
+ "FREMDKOSTEN",
+ "BESCHAFFUNG",
+ "SELBSTKOSTEN",
+ "MARGEN",
+ "ENERGIEVERSORGUNGSKOSTEN"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Kundengruppe.json b/unittests/test_data/bo4e_schemas/enum/Kundengruppe.json
new file mode 100644
index 0000000..46538bc
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Kundengruppe.json
@@ -0,0 +1,42 @@
+{
+ "description": "Kundengruppe für eine Marktlokation (orientiert sich an den Standard-Lastprofilen).",
+ "title": "Kundengruppe",
+ "type": "string",
+ "enum": [
+ "RLM",
+ "RLM_KOMMUNAL",
+ "SLP_KOMMUNAL",
+ "SLP_S_G0",
+ "SLP_S_G1",
+ "SLP_S_G2",
+ "SLP_S_G3",
+ "SLP_S_G4",
+ "SLP_S_G5",
+ "SLP_S_G6",
+ "SLP_S_G7",
+ "SLP_S_L0",
+ "SLP_S_L1",
+ "SLP_S_L2",
+ "SLP_S_H0",
+ "SLP_S_SB",
+ "SLP_S_HZ",
+ "SLP_S_WP",
+ "SLP_S_EM",
+ "SLP_S_HZ_GEM",
+ "SLP_G_GKO",
+ "SLP_G_STANDARD",
+ "SLP_G_GHA",
+ "SLP_G_GMK",
+ "SLP_G_GBD",
+ "SLP_G_GGA",
+ "SLP_G_GBH",
+ "SLP_G_GBA",
+ "SLP_G_GWA",
+ "SLP_G_GGB",
+ "SLP_G_GPD",
+ "SLP_G_GMF",
+ "SLP_G_HEF",
+ "SLP_G_HMF",
+ "SLP_G_HKO"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/KundengruppeKA.json b/unittests/test_data/bo4e_schemas/enum/KundengruppeKA.json
new file mode 100644
index 0000000..5dd9755
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/KundengruppeKA.json
@@ -0,0 +1,27 @@
+{
+ "description": "Eine Aufzählung zur Einordnung für die Höhe der Konzessionsabgabe.",
+ "title": "KundengruppeKA",
+ "type": "string",
+ "enum": [
+ "S_SCHWACHLAST",
+ "S_TARIF_25000",
+ "S_TARIF_100000",
+ "S_TARIF_500000",
+ "S_TARIF_G_500000",
+ "S_SONDERKUNDE",
+ "G_KOWA_25000",
+ "G_KOWA_100000",
+ "G_KOWA_500000",
+ "G_KOWA_G_500000",
+ "G_TARIF_25000",
+ "G_TARIF_100000",
+ "G_TARIF_500000",
+ "G_TARIF_G_500000",
+ "G_SONDERKUNDE",
+ "SONDER_KAS",
+ "SONDER_SAS",
+ "SONDER_TAS",
+ "SONDER_TKS",
+ "SONDER_TSS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Kundentyp.json b/unittests/test_data/bo4e_schemas/enum/Kundentyp.json
new file mode 100644
index 0000000..31fb0f8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Kundentyp.json
@@ -0,0 +1,22 @@
+{
+ "description": "Auflistung der Typen von Endkunden. Daraus kann das Verbrauchsprofil abgeleitet werden.",
+ "title": "Kundentyp",
+ "type": "string",
+ "enum": [
+ "GEWERBE",
+ "PRIVAT",
+ "LANDWIRT",
+ "SONSTIGE",
+ "HAUSHALT",
+ "DIREKTHEIZUNG",
+ "GEMEINSCHAFT_MFH",
+ "KIRCHE",
+ "KWK",
+ "LADESAEULE",
+ "BELEUCHTUNG_OEFFENTLICH",
+ "BELEUCHTUNG_STRASSE",
+ "SPEICHERHEIZUNG",
+ "UNTERBR_EINRICHTUNG",
+ "WAERMEPUMPE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Landescode.json b/unittests/test_data/bo4e_schemas/enum/Landescode.json
new file mode 100644
index 0000000..05a3f95
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Landescode.json
@@ -0,0 +1,256 @@
+{
+ "title": "Landescode",
+ "type": "string",
+ "enum": [
+ "AF",
+ "AX",
+ "AL",
+ "DZ",
+ "AS",
+ "AD",
+ "AO",
+ "AI",
+ "AQ",
+ "AG",
+ "AR",
+ "AM",
+ "AW",
+ "AU",
+ "AT",
+ "AZ",
+ "BS",
+ "BH",
+ "BD",
+ "BB",
+ "BY",
+ "BE",
+ "BZ",
+ "BJ",
+ "BM",
+ "BT",
+ "BO",
+ "BQ",
+ "BA",
+ "BW",
+ "BV",
+ "BR",
+ "IO",
+ "BN",
+ "BG",
+ "BF",
+ "BI",
+ "KH",
+ "CM",
+ "CA",
+ "CV",
+ "KY",
+ "CF",
+ "TD",
+ "CL",
+ "CN",
+ "CX",
+ "CC",
+ "CO",
+ "KM",
+ "CG",
+ "CD",
+ "CK",
+ "CR",
+ "CI",
+ "HR",
+ "CU",
+ "CW",
+ "CY",
+ "CZ",
+ "DK",
+ "DJ",
+ "DM",
+ "DO",
+ "EC",
+ "EG",
+ "SV",
+ "GQ",
+ "ER",
+ "EE",
+ "ET",
+ "FK",
+ "FO",
+ "FJ",
+ "FI",
+ "FR",
+ "GF",
+ "PF",
+ "TF",
+ "GA",
+ "GM",
+ "GE",
+ "DE",
+ "GH",
+ "GI",
+ "GR",
+ "GL",
+ "GD",
+ "GP",
+ "GU",
+ "GT",
+ "GG",
+ "GN",
+ "GW",
+ "GY",
+ "HT",
+ "HM",
+ "VA",
+ "HN",
+ "HK",
+ "HU",
+ "IS",
+ "IN",
+ "ID",
+ "IR",
+ "IQ",
+ "IE",
+ "IM",
+ "IL",
+ "IT",
+ "JM",
+ "JP",
+ "JE",
+ "JO",
+ "KZ",
+ "KE",
+ "KI",
+ "KP",
+ "KR",
+ "XK",
+ "KW",
+ "KG",
+ "LA",
+ "LV",
+ "LB",
+ "LS",
+ "LR",
+ "LY",
+ "LI",
+ "LT",
+ "LU",
+ "MO",
+ "MK",
+ "MG",
+ "MW",
+ "MY",
+ "MV",
+ "ML",
+ "MT",
+ "MH",
+ "MQ",
+ "MR",
+ "MU",
+ "YT",
+ "MX",
+ "FM",
+ "MD",
+ "MC",
+ "MN",
+ "ME",
+ "MS",
+ "MA",
+ "MZ",
+ "MM",
+ "NA",
+ "NR",
+ "NP",
+ "NL",
+ "NC",
+ "NZ",
+ "NI",
+ "NE",
+ "NG",
+ "NU",
+ "NF",
+ "MP",
+ "NO",
+ "OM",
+ "PK",
+ "PW",
+ "PS",
+ "PA",
+ "PG",
+ "PY",
+ "PE",
+ "PH",
+ "PN",
+ "PL",
+ "PT",
+ "PR",
+ "QA",
+ "RE",
+ "RO",
+ "RU",
+ "RW",
+ "BL",
+ "SH",
+ "KN",
+ "LC",
+ "MF",
+ "PM",
+ "VC",
+ "WS",
+ "SM",
+ "ST",
+ "SA",
+ "SN",
+ "RS",
+ "SC",
+ "SL",
+ "SG",
+ "SX",
+ "SK",
+ "SI",
+ "SB",
+ "SO",
+ "ZA",
+ "GS",
+ "SS",
+ "ES",
+ "LK",
+ "SD",
+ "SR",
+ "SJ",
+ "SZ",
+ "SE",
+ "CH",
+ "SY",
+ "TW",
+ "TJ",
+ "TZ",
+ "TH",
+ "TL",
+ "TG",
+ "TK",
+ "TO",
+ "TT",
+ "TN",
+ "TR",
+ "TM",
+ "TC",
+ "TV",
+ "UG",
+ "UA",
+ "AE",
+ "GB",
+ "US",
+ "UM",
+ "UY",
+ "UZ",
+ "VU",
+ "VE",
+ "VN",
+ "VG",
+ "VI",
+ "WF",
+ "EH",
+ "YE",
+ "ZM",
+ "ZW"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Leistungstyp.json b/unittests/test_data/bo4e_schemas/enum/Leistungstyp.json
new file mode 100644
index 0000000..017e477
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Leistungstyp.json
@@ -0,0 +1,39 @@
+{
+ "description": "",
+ "title": "Leistungstyp",
+ "type": "string",
+ "enum": [
+ "ARBEITSPREIS_WIRKARBEIT",
+ "LEISTUNGSPREIS_WIRKLEISTUNG",
+ "ARBEITSPREIS_BLINDARBEIT_IND",
+ "ARBEITSPREIS_BLINDARBEIT_KAP",
+ "GRUNDPREIS",
+ "GRUNDPREIS_ARBEIT",
+ "GRUNDPREIS_LEISTUNG",
+ "MEHRMINDERMENGE",
+ "MESSSTELLENBETRIEB",
+ "MESSDIENSTLEISTUNG",
+ "MESSDIENSTLEISTUNG_INKL_MESSUNG",
+ "ABRECHNUNG",
+ "KONZESSIONS_ABGABE",
+ "KWK_UMLAGE",
+ "OFFSHORE_UMLAGE",
+ "ABLAV_UMLAGE",
+ "SONDERKUNDEN_UMLAGE",
+ "REGELENERGIE_UMLAGE",
+ "BILANZIERUNG_UMLAGE",
+ "AUSLESUNG_ZUSAETZLICH",
+ "ABLESUNG_ZUSAETZLICH",
+ "ABRECHNUNG_ZUSAETZLICH",
+ "SPERRUNG",
+ "ENTSPERRUNG",
+ "MAHNKOSTEN",
+ "INKASSOKOSTEN",
+ "EEG_UMLAGE",
+ "ENERGIESTEUER",
+ "NETZPREIS",
+ "MESSPREIS",
+ "SONSTIGER_PREIS",
+ "DIENSTLEISTUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Lokationstyp.json b/unittests/test_data/bo4e_schemas/enum/Lokationstyp.json
new file mode 100644
index 0000000..b2d6aed
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Lokationstyp.json
@@ -0,0 +1,9 @@
+{
+ "description": "Gibt an, ob es sich um eine Markt- oder Messlokation handelt.",
+ "title": "Lokationstyp",
+ "type": "string",
+ "enum": [
+ "MALO",
+ "MELO"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Marktrolle.json b/unittests/test_data/bo4e_schemas/enum/Marktrolle.json
new file mode 100644
index 0000000..3db9d82
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Marktrolle.json
@@ -0,0 +1,21 @@
+{
+ "description": "Diese Rollen kann ein Marktteilnehmer einnehmen.",
+ "title": "Marktrolle",
+ "type": "string",
+ "enum": [
+ "NB",
+ "LF",
+ "MSB",
+ "DL",
+ "BKV",
+ "BKO",
+ "UENB",
+ "KUNDE_SELBST_NN",
+ "MGV",
+ "EIV",
+ "RB",
+ "KUNDE",
+ "INTERESSENT",
+ "BTR"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Medium.json b/unittests/test_data/bo4e_schemas/enum/Medium.json
new file mode 100644
index 0000000..3d1c552
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Medium.json
@@ -0,0 +1,11 @@
+{
+ "description": "Gibt ein physikalisches Medium an.",
+ "title": "Medium",
+ "type": "string",
+ "enum": [
+ "STROM",
+ "GAS",
+ "WASSER",
+ "DAMPF"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Mengeneinheit.json b/unittests/test_data/bo4e_schemas/enum/Mengeneinheit.json
new file mode 100644
index 0000000..d325163
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Mengeneinheit.json
@@ -0,0 +1,21 @@
+{
+ "description": "Einheit: Messgrößen, die per Messung oder Vorgabe ermittelt werden können.",
+ "title": "Mengeneinheit",
+ "type": "string",
+ "enum": [
+ "W",
+ "WH",
+ "KW",
+ "KWH",
+ "KVARH",
+ "MW",
+ "MWH",
+ "STUECK",
+ "KUBIKMETER",
+ "STUNDE",
+ "TAG",
+ "MONAT",
+ "JAHR",
+ "PROZENT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Mengenoperator.json b/unittests/test_data/bo4e_schemas/enum/Mengenoperator.json
new file mode 100644
index 0000000..bebc136
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Mengenoperator.json
@@ -0,0 +1,10 @@
+{
+ "description": "Angabe, wie eine Menge in Bezug auf einen Wert zu bilden ist.",
+ "title": "Mengenoperator",
+ "type": "string",
+ "enum": [
+ "KLEINER_ALS",
+ "GROESSER_ALS",
+ "GLEICH"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Messart.json b/unittests/test_data/bo4e_schemas/enum/Messart.json
new file mode 100644
index 0000000..64f4903
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Messart.json
@@ -0,0 +1,10 @@
+{
+ "description": "Gibt an, auf welche Art gemessen wurde.",
+ "title": "Messart",
+ "type": "string",
+ "enum": [
+ "AKTUELLERWERT",
+ "MITTELWERT",
+ "MAXIMALWERT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Messgroesse.json b/unittests/test_data/bo4e_schemas/enum/Messgroesse.json
new file mode 100644
index 0000000..7f6f53b
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Messgroesse.json
@@ -0,0 +1,20 @@
+{
+ "description": "Gibt die physikalische Größe an, die gemessen wurde.",
+ "title": "Messgroesse",
+ "type": "string",
+ "enum": [
+ "STROM",
+ "SPANNUNG",
+ "WIRKLEISTUNG",
+ "BLINDLEISTUNG",
+ "DRUCK",
+ "LASTGANG",
+ "LASTPROFIL",
+ "TEMPERATUR",
+ "ZZAHL",
+ "BRENNWERT",
+ "GRADTZAGSZAHLEN",
+ "VOLUMENSTROM",
+ "PREISE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Messpreistyp.json b/unittests/test_data/bo4e_schemas/enum/Messpreistyp.json
new file mode 100644
index 0000000..c5d56db
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Messpreistyp.json
@@ -0,0 +1,31 @@
+{
+ "description": "Festlegung, welcher Typ von Messung mit einem Preis belegt wird",
+ "title": "Messpreistyp",
+ "type": "string",
+ "enum": [
+ "MESSPREIS_G2_5",
+ "MESSPREIS_G4",
+ "MESSPREIS_G6",
+ "MESSPREIS_G10",
+ "MESSPREIS_G16",
+ "MESSPREIS_G25",
+ "MESSPREIS_G40",
+ "ELEKTRONISCHER_AUFSATZ",
+ "SMART_METER_MESSPREIS_G2_5",
+ "SMART_METER_MESSPREIS_G4",
+ "SMART_METER_MESSPREIS_G6",
+ "SMART_METER_MESSPREIS_G10",
+ "SMART_METER_MESSPREIS_G16",
+ "SMART_METER_MESSPREIS_G25",
+ "SMART_METER_MESSPREIS_G40",
+ "VERRECHNUNGSPREIS_ET_WECHSEL",
+ "VERRECHNUNGSPREIS_ET_DREH",
+ "VERRECHNUNGSPREIS_ZT_WECHSEL",
+ "VERRECHNUNGSPREIS_ZT_DREH",
+ "VERRECHNUNGSPREIS_L_ET",
+ "VERRECHNUNGSPREIS_L_ZT",
+ "VERRECHNUNGSPREIS_SM",
+ "AUFSCHLAG_WANDLER",
+ "AUFSCHLAG_TARIFSCHALTUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Messwerterfassung.json b/unittests/test_data/bo4e_schemas/enum/Messwerterfassung.json
new file mode 100644
index 0000000..33b5bd9
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Messwerterfassung.json
@@ -0,0 +1,9 @@
+{
+ "description": "Die Messwerterfassung des Zählers",
+ "title": "Messwerterfassung",
+ "type": "string",
+ "enum": [
+ "FERNAUSLESBAR",
+ "MANUELL_AUSGELESENE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Messwertstatus.json b/unittests/test_data/bo4e_schemas/enum/Messwertstatus.json
new file mode 100644
index 0000000..79ba4a7
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Messwertstatus.json
@@ -0,0 +1,15 @@
+{
+ "description": "Der Status eines Zählerstandes",
+ "title": "Messwertstatus",
+ "type": "string",
+ "enum": [
+ "ABGELESEN",
+ "ERSATZWERT",
+ "VORSCHLAGSWERT",
+ "NICHT_VERWENDBAR",
+ "PROGNOSEWERT",
+ "VORLAEUFIGERWERT",
+ "ENERGIEMENGESUMMIERT",
+ "FEHLT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Messwertstatuszusatz.json b/unittests/test_data/bo4e_schemas/enum/Messwertstatuszusatz.json
new file mode 100644
index 0000000..01b6ff9
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Messwertstatuszusatz.json
@@ -0,0 +1,46 @@
+{
+ "description": "Aufzählung von zusätzlichen Informationen zum Status, beispielsweise in Lastgängen oder Zählwerkständen.",
+ "title": "Messwertstatuszusatz",
+ "type": "string",
+ "enum": [
+ "Z84_LEERSTAND",
+ "Z85_REALERZAEHLERUEBERLAUFGEPRUEFT",
+ "Z86_PLAUSIBELWGKONTROLLABLESUNG",
+ "Z87_PLAUSIBELWGKUNDENHINWEIS",
+ "ZC3_AUSTAUSCHDESERSATZWERTES",
+ "Z88_VERGLEICHSMESSUNG(GEEICHT)",
+ "Z89_VERGLEICHSMESSUNG(NICHTGEEICHT)",
+ "Z90_MESSWERTNACHBILDUNGAUSGEEICHTENWERTEN",
+ "Z91_MESSWERTNACHBILDUNGAUSNICHTGEEICHTENWERTEN",
+ "Z92_INTERPOLATION",
+ "Z93_HALTEWERT",
+ "Z94_BILANZIERUNGNETZABSCHNITT",
+ "Z95_HISTORISCHEMESSWERTE",
+ "ZJ2_STATISTISCHEMETHODE",
+ "Z74_KEINZUGANG",
+ "Z75_KOMMUNIKATIONSSTOERUNG",
+ "Z76_NETZAUSFALL",
+ "Z77_SPANNUNGSAUSFALL",
+ "Z78_GERAETEWECHSEL",
+ "Z79_KALIBRIERUNG",
+ "Z80_GERAETARBEITETAUSSERHALBDERBETRIEBSBEDINGUNGEN",
+ "Z81_MESSEINRICHTUNGGESTOERT_DEFEKT",
+ "Z82_UNSICHERHEITMESSUNG",
+ "Z98_BERUECKSICHTIGUNGSTOERMENGENZAEHLWERK",
+ "Z99_MENGENUMWERTUNGUNVOLLSTAENDIG",
+ "ZA0_UHRZEITGESTELLT_SYNCHRONISATION",
+ "ZA1_MESSWERTUNPLAUSIBEL",
+ "ZC2_TARIFSCHALTGERAETDEFEKT",
+ "ZC4_IMPULSWERTIGKEITNICHTAUSREICHEND",
+ "ZA3_FALSCHERWANDLERFAKTOR",
+ "ZA4_FEHLERHAFTEABLESUNG",
+ "ZA5_AENDERUNGDERBERECHNUNG",
+ "ZA6_UMBAUDERMESSLOKATION",
+ "ZA7_DATENBEARBEITUNGSFEHLER",
+ "ZA8_BRENNWERTKORREKTUR",
+ "ZA9_Z-ZAHL-KORREKTUR",
+ "ZB0_STOERUNG_DEFEKTMESSEINRICHTUNG",
+ "ZB9_AENDERUNGTARIFSCHALTZEITEN",
+ "ZG3_UMSTELLUNGGASQUALITAET"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Netzebene.json b/unittests/test_data/bo4e_schemas/enum/Netzebene.json
new file mode 100644
index 0000000..2e56d45
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Netzebene.json
@@ -0,0 +1,17 @@
+{
+ "description": "Auflistung möglicher Netzebenen innerhalb der Energiearten Strom und Gas.",
+ "title": "Netzebene",
+ "type": "string",
+ "enum": [
+ "NSP",
+ "MSP",
+ "HSP",
+ "HSS",
+ "MSP_NSP_UMSP",
+ "HSP_MSP_UMSP",
+ "HSS_HSP_UMSP",
+ "HD",
+ "MD",
+ "ND"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/NetznutzungRechnungsart.json b/unittests/test_data/bo4e_schemas/enum/NetznutzungRechnungsart.json
new file mode 100644
index 0000000..185ad3b
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/NetznutzungRechnungsart.json
@@ -0,0 +1,9 @@
+{
+ "description": "Abbildung verschiedener in der INVOIC angegebenen Rechnungsarten.",
+ "title": "NetznutzungRechnungsart",
+ "type": "string",
+ "enum": [
+ "HANDELSRECHNUNG",
+ "SELBSTAUSGESTELLT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/NetznutzungRechnungstyp.json b/unittests/test_data/bo4e_schemas/enum/NetznutzungRechnungstyp.json
new file mode 100644
index 0000000..10ac751
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/NetznutzungRechnungstyp.json
@@ -0,0 +1,16 @@
+{
+ "description": "Abbildung verschiedener in der INVOIC angegebenen Rechnungstypen.",
+ "title": "NetznutzungRechnungstyp",
+ "type": "string",
+ "enum": [
+ "ABSCHLUSSRECHNUNG",
+ "ABSCHLAGSRECHNUNG",
+ "TURNUSRECHNUNG",
+ "MONATSRECHNUNG",
+ "WIMRECHNUNG",
+ "ZWISCHENRECHNUNG",
+ "INTEGRIERTE_13TE_RECHNUNG",
+ "ZUSAETZLICHE_13TE_RECHNUNG",
+ "MEHRMINDERMENGENRECHNUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Oekolabel.json b/unittests/test_data/bo4e_schemas/enum/Oekolabel.json
new file mode 100644
index 0000000..7dc2e31
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Oekolabel.json
@@ -0,0 +1,19 @@
+{
+ "description": "Aufzählung der Labels für Öko-Strom von verschiedenen Herausgebern.",
+ "title": "Oekolabel",
+ "type": "string",
+ "enum": [
+ "ENERGREEN",
+ "GASGREEN_GRUENER_STROM",
+ "GASGREEN",
+ "GRUENER_STROM_GOLD",
+ "GRUENER_STROM_SILBER",
+ "GRUENER_STROM",
+ "GRUENES_GAS",
+ "NATURWATT_STROM",
+ "OK_POWER",
+ "RENEWABLE_PLUS",
+ "WATERGREEN",
+ "WATERGREEN_PLUS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Oekozertifikat.json b/unittests/test_data/bo4e_schemas/enum/Oekozertifikat.json
new file mode 100644
index 0000000..9e57b6a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Oekozertifikat.json
@@ -0,0 +1,24 @@
+{
+ "description": "Zertifikate für Ökostrom von verschiedenen Herausgebern.",
+ "title": "Oekozertifikat",
+ "type": "string",
+ "enum": [
+ "CMS_EE01",
+ "CMS_EE02",
+ "EECS",
+ "FRAUNHOFER",
+ "BET",
+ "KLIMA_INVEST",
+ "LGA",
+ "FREIBERG",
+ "RECS",
+ "REGS_EGL",
+ "TUEV",
+ "TUEV_HESSEN",
+ "TUEV_NORD",
+ "TUEV_RHEINLAND",
+ "TUEV_SUED",
+ "TUEV_SUED_EE01",
+ "TUEV_SUED_EE02"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Preisgarantietyp.json b/unittests/test_data/bo4e_schemas/enum/Preisgarantietyp.json
new file mode 100644
index 0000000..802308e
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Preisgarantietyp.json
@@ -0,0 +1,11 @@
+{
+ "description": "Aufzählung der Möglichkeiten für die Vergabe von Preisgarantien",
+ "title": "Preisgarantietyp",
+ "type": "string",
+ "enum": [
+ "ALLE_PREISBESTANDTEILE_BRUTTO",
+ "ALLE_PREISBESTANDTEILE_NETTO",
+ "PREISBESTANDTEILE_OHNE_ABGABEN",
+ "NUR_ENERGIEPREIS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Preismodell.json b/unittests/test_data/bo4e_schemas/enum/Preismodell.json
new file mode 100644
index 0000000..80189b0
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Preismodell.json
@@ -0,0 +1,9 @@
+{
+ "description": "Bezeichnung der Preismodelle in Ausschreibungen für die Energielieferung.",
+ "title": "Preismodell",
+ "type": "string",
+ "enum": [
+ "FESTPREIS",
+ "TRANCHE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Preisstatus.json b/unittests/test_data/bo4e_schemas/enum/Preisstatus.json
new file mode 100644
index 0000000..9a46653
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Preisstatus.json
@@ -0,0 +1,9 @@
+{
+ "description": "Statusinformation für Preise",
+ "title": "Preisstatus",
+ "type": "string",
+ "enum": [
+ "VORLAEUFIG",
+ "ENDGUELTIG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Preistyp.json b/unittests/test_data/bo4e_schemas/enum/Preistyp.json
new file mode 100644
index 0000000..1213119
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Preistyp.json
@@ -0,0 +1,17 @@
+{
+ "description": "Aufschlüsselung der Preistypen in Tarifen.",
+ "title": "Preistyp",
+ "type": "string",
+ "enum": [
+ "GRUNDPREIS",
+ "ARBEITSPREIS_EINTARIF",
+ "ARBEITSPREIS_HT",
+ "ARBEITSPREIS_NT",
+ "LEISTUNGSPREIS",
+ "MESSPREIS",
+ "ENTGELT_ABLESUNG",
+ "ENTGELT_ABRECHNUNG",
+ "ENTGELT_MSB",
+ "PROVISION"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Rechnungslegung.json b/unittests/test_data/bo4e_schemas/enum/Rechnungslegung.json
new file mode 100644
index 0000000..f7efee8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Rechnungslegung.json
@@ -0,0 +1,12 @@
+{
+ "description": "Aufzählung der Möglichkeiten zur Rechnungslegung in Ausschreibungen.",
+ "title": "Rechnungslegung",
+ "type": "string",
+ "enum": [
+ "MONATSRECHN",
+ "ABSCHL_MONATSRECHN",
+ "ABSCHL_JAHRESRECHN",
+ "MONATSRECHN_JAHRESRECHN",
+ "VORKASSE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Rechnungsstatus.json b/unittests/test_data/bo4e_schemas/enum/Rechnungsstatus.json
new file mode 100644
index 0000000..7acac2e
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Rechnungsstatus.json
@@ -0,0 +1,12 @@
+{
+ "description": "Abbildung verschiedener Zustände, die im Rahmen der Rechnungsbearbeitung durchlaufen werden.",
+ "title": "Rechnungsstatus",
+ "type": "string",
+ "enum": [
+ "UNGEPRUEFT",
+ "GEPRUEFT_OK",
+ "GEPRUEFT_FEHLERHAFT",
+ "GEBUCHT",
+ "BEZAHLT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Rechnungstyp.json b/unittests/test_data/bo4e_schemas/enum/Rechnungstyp.json
new file mode 100644
index 0000000..d138436
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Rechnungstyp.json
@@ -0,0 +1,13 @@
+{
+ "description": "Abbildung verschiedener Rechnungstypen zur Kennzeichnung von Rechnungen",
+ "title": "Rechnungstyp",
+ "type": "string",
+ "enum": [
+ "ENDKUNDENRECHNUNG",
+ "NETZNUTZUNGSRECHNUNG",
+ "MEHRMINDERMENGENRECHNUNG",
+ "MESSSTELLENBETRIEBSRECHNUNG",
+ "BESCHAFFUNGSRECHNUNG",
+ "AUSGLEICHSENERGIERECHNUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Regionskriteriumtyp.json b/unittests/test_data/bo4e_schemas/enum/Regionskriteriumtyp.json
new file mode 100644
index 0000000..b665a8c
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Regionskriteriumtyp.json
@@ -0,0 +1,40 @@
+{
+ "description": "Klassifizierung der Kriterien für eine regionale Eingrenzung.",
+ "title": "Regionskriteriumtyp",
+ "type": "string",
+ "enum": [
+ "BUNDESLANDKENNZIFFER",
+ "BUNDESLAND_NAME",
+ "MARKTGEBIET_NUMMER",
+ "MARKTGEBIET_NAME",
+ "REGELGEBIET_NUMMER",
+ "REGELGEBIET_NAME",
+ "NETZ_STROM",
+ "NETZ_GAS",
+ "NETZBETREIBER_NUMMER_STROM",
+ "NETZBETREIBER_NUMMER_GAS",
+ "NETZBETREIBER_NAME_STROM",
+ "NETZBETREIBER_NAME_GAS",
+ "BILANZIERUNGS_GEBIET_NUMMER",
+ "MSB_NUMMER",
+ "MSB_NAME",
+ "VERSORGER_NUMMER",
+ "VERSORGER_NAME",
+ "GRUNDVERSORGER_NUMMER_STROM",
+ "GRUNDVERSORGER_NAME_STROM",
+ "GRUNDVERSORGER_NUMMER_GAS",
+ "GRUNDVERSORGER_NAME_GAS",
+ "KREIS_NAME",
+ "KREISKENNZIFFER",
+ "GEMEINDE_NAME",
+ "GEMEINDEKENNZIFFER",
+ "POSTLEITZAHL",
+ "ORT",
+ "POSTORT",
+ "EINWOHNERZAHL_GEMEINDE",
+ "EINWOHNERZAHL_ORT",
+ "KM_UMKREIS",
+ "BUNDESWEIT",
+ "PLZ_BEREICH"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Registeranzahl.json b/unittests/test_data/bo4e_schemas/enum/Registeranzahl.json
new file mode 100644
index 0000000..39ae311
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Registeranzahl.json
@@ -0,0 +1,10 @@
+{
+ "description": "Die Registeranzahl wird verwendet zur Charakterisierung von Zählern und daraus resultierenden Tarifen.",
+ "title": "Registeranzahl",
+ "type": "string",
+ "enum": [
+ "EINTARIF",
+ "ZWEITARIF",
+ "MEHRTARIF"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Rollencodetyp.json b/unittests/test_data/bo4e_schemas/enum/Rollencodetyp.json
new file mode 100644
index 0000000..dfd19d6
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Rollencodetyp.json
@@ -0,0 +1,10 @@
+{
+ "description": "Gibt den Codetyp einer Rolle, beispielsweise einer Marktrolle, an.",
+ "title": "Rollencodetyp",
+ "type": "string",
+ "enum": [
+ "BDEW",
+ "DVGW",
+ "GLN"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Rufnummernart.json b/unittests/test_data/bo4e_schemas/enum/Rufnummernart.json
new file mode 100644
index 0000000..3eb516d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Rufnummernart.json
@@ -0,0 +1,16 @@
+{
+ "description": "Abbildung verschiedener Rufnummerntypen.",
+ "title": "Rufnummernart",
+ "type": "string",
+ "enum": [
+ "RUF_ZENTRALE",
+ "FAX_ZENTRALE",
+ "SAMMELRUF",
+ "SAMMELFAX",
+ "ABTEILUNGRUF",
+ "ABTEILUNGFAX",
+ "RUF_DURCHWAHL",
+ "FAX_DURCHWAHL",
+ "MOBIL_NUMMER"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Sparte.json b/unittests/test_data/bo4e_schemas/enum/Sparte.json
new file mode 100644
index 0000000..5d61138
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Sparte.json
@@ -0,0 +1,14 @@
+{
+ "description": "Unterscheidungsmöglichkeiten für die Sparte.",
+ "title": "Sparte",
+ "type": "string",
+ "enum": [
+ "STROM",
+ "GAS",
+ "FERNWAERME",
+ "NAHWAERME",
+ "WASSER",
+ "ABWASSER",
+ "STROM_UND_GAS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Steuerkennzeichen.json b/unittests/test_data/bo4e_schemas/enum/Steuerkennzeichen.json
new file mode 100644
index 0000000..d8f14c6
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Steuerkennzeichen.json
@@ -0,0 +1,15 @@
+{
+ "description": "Zur Kennzeichnung verschiedener Steuersätze und Verfahren.",
+ "title": "Steuerkennzeichen",
+ "type": "string",
+ "enum": [
+ "UST_0",
+ "UST_19",
+ "UST_16",
+ "UST_7",
+ "VST_0",
+ "VST_19",
+ "VST_7",
+ "RCV"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Tarifkalkulationsmethode.json b/unittests/test_data/bo4e_schemas/enum/Tarifkalkulationsmethode.json
new file mode 100644
index 0000000..83c93a6
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Tarifkalkulationsmethode.json
@@ -0,0 +1,12 @@
+{
+ "description": "Auflistung der verschiedenen Berechnungsmethoden für ein Preisblatt.",
+ "title": "Tarifkalkulationsmethode",
+ "type": "string",
+ "enum": [
+ "KEINE",
+ "STAFFELN",
+ "ZONEN",
+ "BESTABRECHNUNG_STAFFEL",
+ "PAKETPREIS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Tarifmerkmal.json b/unittests/test_data/bo4e_schemas/enum/Tarifmerkmal.json
new file mode 100644
index 0000000..4b82bfd
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Tarifmerkmal.json
@@ -0,0 +1,16 @@
+{
+ "description": "Produktmerkmale im Zusammenhang mit der Tarifdefinition.",
+ "title": "Tarifmerkmal",
+ "type": "string",
+ "enum": [
+ "STANDARD",
+ "VORKASSE",
+ "PAKET",
+ "KOMBI",
+ "FESTPREIS",
+ "BAUSTROM",
+ "HAUSLICHT",
+ "HEIZSTROM",
+ "ONLINE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Tarifregionskriterium.json b/unittests/test_data/bo4e_schemas/enum/Tarifregionskriterium.json
new file mode 100644
index 0000000..100e500
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Tarifregionskriterium.json
@@ -0,0 +1,12 @@
+{
+ "description": "Mit diesen Kriterien können regionale Bereiche definiert werden.",
+ "title": "Tarifregionskriterium",
+ "type": "string",
+ "enum": [
+ "NETZ_NUMMER",
+ "POSTLEITZAHL",
+ "ORT",
+ "GRUNDVERSORGER_NUMMER",
+ "REGION"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Tariftyp.json b/unittests/test_data/bo4e_schemas/enum/Tariftyp.json
new file mode 100644
index 0000000..74cea04
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Tariftyp.json
@@ -0,0 +1,11 @@
+{
+ "description": "Zur Differenzierung von Grund/Ersatzversorgungstarifen und sonstigen angebotenen Tarifen.",
+ "title": "Tariftyp",
+ "type": "string",
+ "enum": [
+ "GRUND_ERSATZVERSORGUNG",
+ "GRUNDVERSORGUNG",
+ "ERSATZVERSORGUNG",
+ "SONDERTARIF"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Tarifzeit.json b/unittests/test_data/bo4e_schemas/enum/Tarifzeit.json
new file mode 100644
index 0000000..89eb479
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Tarifzeit.json
@@ -0,0 +1,10 @@
+{
+ "description": "Zur Kennzeichnung verschiedener Tarifzeiten, beispielsweise zur Bepreisung oder zur Verbrauchsermittlung.",
+ "title": "Tarifzeit",
+ "type": "string",
+ "enum": [
+ "TZ_STANDARD",
+ "TZ_HT",
+ "TZ_NT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Themengebiet.json b/unittests/test_data/bo4e_schemas/enum/Themengebiet.json
new file mode 100644
index 0000000..9f62fff
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Themengebiet.json
@@ -0,0 +1,66 @@
+{
+ "description": "Über dieses ENUM kann eine thematische Zuordnung, beispielsweise eines Ansprechpartners, vorgenommen werden.",
+ "title": "Themengebiet",
+ "type": "string",
+ "enum": [
+ "ALLGEMEINER_INFORMATIONSAUSTAUSCH",
+ "AN_UND_ABMELDUNG",
+ "ANSPRECHPARTNER_ALLGEMEIN",
+ "ANSPRECHPARTNER_BDEW_DVGW",
+ "ANSPRECHPARTNER_IT_TECHNIK",
+ "BILANZIERUNG",
+ "BILANZKREISKOORDINATOR",
+ "BILANZKREISVERANTWORTLICHER",
+ "DATENFORMATE_ZERTIFIKATE_VERSCHLUESSELUNGEN",
+ "DEBITORENMANAGEMENT",
+ "DEMAND_SIDE_MANAGEMENT",
+ "EDI_VEREINBARUNG",
+ "EDIFACT",
+ "ENERGIEDATENMANAGEMENT",
+ "FAHRPLANMANAGEMENT",
+ "ALOCAT",
+ "APERAK",
+ "CONTRL",
+ "INVOIC",
+ "MSCONS",
+ "ORDERS",
+ "ORDERSP",
+ "REMADV",
+ "UTILMD",
+ "GABI",
+ "GELI",
+ "GERAETERUECKGABE",
+ "GERAETEWECHSEL",
+ "GPKE",
+ "INBETRIEBNAHME",
+ "KAPAZITAETSMANAGEMENT",
+ "KLAERFAELLE",
+ "LASTGAENGE_RLM",
+ "LIEFERANTENRAHMENVERTRAG",
+ "LIEFERANTENWECHSEL",
+ "MABIS",
+ "MAHNWESEN",
+ "MARKTGEBIETSVERANTWORTLICHER",
+ "MARKTKOMMUNIKATION",
+ "MEHR_MINDERMENGEN",
+ "MSB_MDL",
+ "NETZABRECHNUNG",
+ "NETZENTGELTE",
+ "NETZMANAGEMENT",
+ "RECHT",
+ "REGULIERUNGSMANAGEMENT",
+ "REKLAMATIONEN",
+ "SPERREN_ENTSPERREN_INKASSO",
+ "STAMMDATEN",
+ "STOERUNGSFAELLE",
+ "TECHNISCHE_FRAGEN",
+ "UMSTELLUNG_INVOIC",
+ "VERSCHLUESSELUNG_SIGNATUR",
+ "VERTRAGSMANAGEMENT",
+ "VERTRIEB",
+ "WIM",
+ "ZAEHLERSTAENDE_SLP",
+ "ZAHLUNGSVERKEHR",
+ "ZUORDNUNGSVEREINBARUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Titel.json b/unittests/test_data/bo4e_schemas/enum/Titel.json
new file mode 100644
index 0000000..452a507
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Titel.json
@@ -0,0 +1,10 @@
+{
+ "description": "Übersicht möglicher Titel, z.B. eines Geschäftspartners.",
+ "title": "Titel",
+ "type": "string",
+ "enum": [
+ "DR",
+ "PROF",
+ "PROF_DR"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Typ.json b/unittests/test_data/bo4e_schemas/enum/Typ.json
new file mode 100644
index 0000000..b632cac
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Typ.json
@@ -0,0 +1,41 @@
+{
+ "description": "Auflistung sämtlicher existierender Geschäftsobjekte.",
+ "title": "Typ",
+ "type": "string",
+ "enum": [
+ "ANGEBOT",
+ "ANSPRECHPARTNER",
+ "AUSSCHREIUNG",
+ "BUENDELVERTRAG",
+ "ENERGIEMENGE",
+ "FREMDKOSTEN",
+ "GERAET",
+ "GESCHAEFTSOBJEKT",
+ "GESCHAEFTSPARTNER",
+ "KOSTEN",
+ "LASTGANG",
+ "LASTGANG_KOMPAKT",
+ "MARKTLOKATION",
+ "MESSLOKATION",
+ "MARKTTEILNEHMER",
+ "NETZNUTZUNGSRECHNUNG",
+ "PREISBLATT",
+ "PREISBLATTDIENSTLEISTUNG",
+ "PREISBLATTHARDWARE",
+ "PREISBLATTKONZESSIONSABGABE",
+ "PREISBLATTMESSUNG",
+ "PREISBLATTNETZNUTZUNG",
+ "PREISBLATTUMLAGEN",
+ "RECHNUNG",
+ "REGION",
+ "REGIONALTARIF",
+ "STANDORTEIGENSCHAFTEN",
+ "TARIF",
+ "TARIFINFO",
+ "TARIFKOSTEN",
+ "TARIFPREISBLATT",
+ "VERTRAG",
+ "ZAEHLER",
+ "ZEITREIHE"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Verbrauchsart.json b/unittests/test_data/bo4e_schemas/enum/Verbrauchsart.json
new file mode 100644
index 0000000..8724e96
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Verbrauchsart.json
@@ -0,0 +1,12 @@
+{
+ "description": "Verbrauchsart einer Marktlokation.",
+ "title": "Verbrauchsart",
+ "type": "string",
+ "enum": [
+ "KL",
+ "KLW",
+ "KLWS",
+ "W",
+ "WS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Vertragsart.json b/unittests/test_data/bo4e_schemas/enum/Vertragsart.json
new file mode 100644
index 0000000..1ceeefc
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Vertragsart.json
@@ -0,0 +1,12 @@
+{
+ "description": "Aufzählung der Vertragsarten.",
+ "title": "Vertragsart",
+ "type": "string",
+ "enum": [
+ "ENERGIELIEFERVERTRAG",
+ "NETZNUTZUNGSVERTRAG",
+ "BILANZIERUNGSVERTRAG",
+ "MESSSTELLENBETRIEBSVERTRAG",
+ "BUENDELVERTRAG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Vertragsform.json b/unittests/test_data/bo4e_schemas/enum/Vertragsform.json
new file mode 100644
index 0000000..f6c8a83
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Vertragsform.json
@@ -0,0 +1,10 @@
+{
+ "description": "Aufzählung der Möglichkeiten zu Vertragsformen in Ausschreibungen.",
+ "title": "Vertragsform",
+ "type": "string",
+ "enum": [
+ "ONLINE",
+ "DIREKT",
+ "FAX"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Vertragsstatus.json b/unittests/test_data/bo4e_schemas/enum/Vertragsstatus.json
new file mode 100644
index 0000000..e9e7184
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Vertragsstatus.json
@@ -0,0 +1,16 @@
+{
+ "description": "Abbildung einer Statusinformation für Verträge.",
+ "title": "Vertragsstatus",
+ "type": "string",
+ "enum": [
+ "IN_ARBEIT",
+ "UEBERMITTELT",
+ "ANGENOMMEN",
+ "AKTIV",
+ "ABGELEHNT",
+ "WIDERRUFEN",
+ "STORNIERT",
+ "GEKUENDIGT",
+ "BEENDET"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Verwendungszweck.json b/unittests/test_data/bo4e_schemas/enum/Verwendungszweck.json
new file mode 100644
index 0000000..7b6a155
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Verwendungszweck.json
@@ -0,0 +1,13 @@
+{
+ "description": "Verwendungszweck der Werte Marktlokation",
+ "title": "Verwendungszweck",
+ "type": "string",
+ "enum": [
+ "NETZNUTZUNGSABRECHNUNG",
+ "BILANZKREISABRECHNUNG",
+ "MEHRMINDERMENGENABRECHNUNG",
+ "ENDKUNDENABRECHNUNG",
+ "UEBERMITTLUNG_AN_DAS_HKNR",
+ "ERMITTLUNG_AUSGEGLICHENHEIT_BILANZKREIS"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Voraussetzungen.json b/unittests/test_data/bo4e_schemas/enum/Voraussetzungen.json
new file mode 100644
index 0000000..1b71b71
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Voraussetzungen.json
@@ -0,0 +1,46 @@
+{
+ "description": "Voraussetzungen, die erfüllt sein müssen, damit dieser Tarif zur Anwendung kommen kann.",
+ "title": "Voraussetzungen",
+ "type": "string",
+ "enum": [
+ "EINZUGSERMAECHTIGUNG",
+ "ZEITPUNKT",
+ "LIEFERANBINDUNG_EINE",
+ "LIEFERANBINDUNG_ALLE",
+ "GEWERBE",
+ "LASTPROFIL",
+ "ZAEHLERTYP_GROESSE",
+ "AUSSCHLUSS_GROSSVERBRAUCHER",
+ "NEUKUNDE",
+ "BESTIMMTE_VERTRAGSFORMALITAETEN",
+ "SELBSTABLESUNG",
+ "ONLINEVORAUSSETZUNG",
+ "MINDESTUMSATZ",
+ "ZUSATZPRODUKT",
+ "NEUKUNDE_MIT_VORAUSSETZUNGEN",
+ "DIREKTVERTRIEB",
+ "ANSCHLUSSART",
+ "ANSCHLUSSWERT",
+ "ALTER_KUNDENANLAGE",
+ "ANLAGEBESCHAFFENHEIT",
+ "BETRIEBSSTUNDENBEGRENZUNG",
+ "FREIGABEZEITEN",
+ "FAMILIENSTRUKTUR",
+ "MITGLIEDSCHAFT",
+ "STAATLICHE_FOERDERUNG",
+ "BESONDERE_VERBRAUCHSSTELLE",
+ "NIEDRIGENERGIE",
+ "ORTSTEILE_LIEFERGEBIET",
+ "WAERMEBEDARF_ERDGAS",
+ "MAX_ZAEHLER_LIEFERSTELLEN",
+ "LIEFERUNGSBESCHRAENKUNG_GASART",
+ "KOMBI_BONI",
+ "ALTVERTRAG",
+ "VORGESCHRIEBENE_ZUSATZANLAGE",
+ "MEHRERE_ZAEHLER_ABNAHMESTELLEN",
+ "BESTIMMTER_ABNAHMEFALL",
+ "ZUSATZMODALITAET",
+ "NACHWEIS_ZAHLUNGSFAEHIGKEIT",
+ "UMSTELLUNG_ENERGIEART"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Waehrungscode.json b/unittests/test_data/bo4e_schemas/enum/Waehrungscode.json
new file mode 100644
index 0000000..3a73623
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Waehrungscode.json
@@ -0,0 +1,189 @@
+{
+ "description": "Aufzählung der Währungscodes.",
+ "title": "Waehrungscode",
+ "type": "string",
+ "enum": [
+ "AED",
+ "AFN",
+ "ALL",
+ "AMD",
+ "ANG",
+ "AOA",
+ "ARS",
+ "AUD",
+ "AWG",
+ "AZN",
+ "BAM",
+ "BBD",
+ "BDT",
+ "BGN",
+ "BHD",
+ "BIF",
+ "BMD",
+ "BND",
+ "BOB",
+ "BOV",
+ "BRL",
+ "BSD",
+ "BTN",
+ "BWP",
+ "BYN",
+ "BYR",
+ "BZD",
+ "CAD",
+ "CDF",
+ "CHE",
+ "CHF",
+ "CHW",
+ "CLF",
+ "CLP",
+ "CNY",
+ "COP",
+ "COU",
+ "CRC",
+ "CUC",
+ "CUP",
+ "CVE",
+ "CZK",
+ "DJF",
+ "DKK",
+ "DOP",
+ "DZD",
+ "EGP",
+ "ERN",
+ "ETB",
+ "EUR",
+ "FJD",
+ "FKP",
+ "GBP",
+ "GEL",
+ "GHS",
+ "GIP",
+ "GMD",
+ "GNF",
+ "GTQ",
+ "GYD",
+ "HKD",
+ "HNL",
+ "HRK",
+ "HTG",
+ "HUF",
+ "IDR",
+ "ILS",
+ "INR",
+ "IQD",
+ "IRR",
+ "ISK",
+ "JMD",
+ "JOD",
+ "JPY",
+ "KES",
+ "KGS",
+ "KHR",
+ "KMF",
+ "KPW",
+ "KRW",
+ "KWD",
+ "KYD",
+ "KZT",
+ "LAK",
+ "LBP",
+ "LKR",
+ "LRD",
+ "LSL",
+ "LTL",
+ "LYD",
+ "MAD",
+ "MDL",
+ "MGA",
+ "MKD",
+ "MMK",
+ "MNT",
+ "MOP",
+ "MRO",
+ "MUR",
+ "MVR",
+ "MWK",
+ "MXN",
+ "MXV",
+ "MYR",
+ "MZN",
+ "NAD",
+ "NGN",
+ "NIO",
+ "NOK",
+ "NPR",
+ "NZD",
+ "OMR",
+ "PAB",
+ "PEN",
+ "PGK",
+ "PHP",
+ "PKR",
+ "PLN",
+ "PYG",
+ "QAR",
+ "RON",
+ "RSD",
+ "RUB",
+ "RUR",
+ "RWF",
+ "SAR",
+ "SBD",
+ "SCR",
+ "SDG",
+ "SEK",
+ "SGD",
+ "SHP",
+ "SLL",
+ "SOS",
+ "SRD",
+ "SSP",
+ "STD",
+ "SVC",
+ "SYP",
+ "SZL",
+ "THB",
+ "TJS",
+ "TMT",
+ "TND",
+ "TOP",
+ "TRY",
+ "TTD",
+ "TWD",
+ "TZS",
+ "UAH",
+ "UGX",
+ "USD",
+ "USN",
+ "USS",
+ "UYI",
+ "UYU",
+ "UZS",
+ "VEF",
+ "VND",
+ "VUV",
+ "WST",
+ "XAF",
+ "XAG",
+ "XAU",
+ "XBA",
+ "XBB",
+ "XBC",
+ "XBD",
+ "XCD",
+ "XDR",
+ "XOF",
+ "XPD",
+ "XPF",
+ "XPT",
+ "XSU",
+ "XTS",
+ "XUA",
+ "XXX",
+ "YER",
+ "ZAR",
+ "ZMW",
+ "ZWL"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Waehrungseinheit.json b/unittests/test_data/bo4e_schemas/enum/Waehrungseinheit.json
new file mode 100644
index 0000000..becf91f
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Waehrungseinheit.json
@@ -0,0 +1,9 @@
+{
+ "description": "In diesem Enum werden die Währungen und ihre Untereinheiten definiert, beispielsweise für die Verwendung in Preisen.",
+ "title": "Waehrungseinheit",
+ "type": "string",
+ "enum": [
+ "EUR",
+ "CT"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Waermenutzung.json b/unittests/test_data/bo4e_schemas/enum/Waermenutzung.json
new file mode 100644
index 0000000..3e46d18
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Waermenutzung.json
@@ -0,0 +1,10 @@
+{
+ "description": "Wärmenutzung Marktlokation",
+ "title": "Waermenutzung",
+ "type": "string",
+ "enum": [
+ "SPEICHERHEIZUNG",
+ "WAERMEPUMPE",
+ "DIREKTHEIZUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Wertermittlungsverfahren.json b/unittests/test_data/bo4e_schemas/enum/Wertermittlungsverfahren.json
new file mode 100644
index 0000000..ac756f8
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Wertermittlungsverfahren.json
@@ -0,0 +1,9 @@
+{
+ "description": "Gibt an, ob es sich um eine Prognose oder eine Messung handelt, beispielsweise bei der Abbildung eines Verbrauchs.",
+ "title": "Wertermittlungsverfahren",
+ "type": "string",
+ "enum": [
+ "PROGNOSE",
+ "MESSUNG"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Zaehlerauspraegung.json b/unittests/test_data/bo4e_schemas/enum/Zaehlerauspraegung.json
new file mode 100644
index 0000000..9997b87
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Zaehlerauspraegung.json
@@ -0,0 +1,9 @@
+{
+ "description": "Gibt an, ob es sich um einen Einrichtungs- oder Zweirichtungszähler handelt.",
+ "title": "Zaehlerauspraegung",
+ "type": "string",
+ "enum": [
+ "EINRICHTUNGSZAEHLER",
+ "ZWEIRICHTUNGSZAEHLER"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Zaehlergroesse.json b/unittests/test_data/bo4e_schemas/enum/Zaehlergroesse.json
new file mode 100644
index 0000000..d1a166a
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Zaehlergroesse.json
@@ -0,0 +1,28 @@
+{
+ "description": "Auflistung möglicher Größen von Zählern",
+ "title": "Zaehlergroesse",
+ "type": "string",
+ "enum": [
+ "G2KOMMA5",
+ "G4",
+ "G6",
+ "G10",
+ "G16",
+ "G25",
+ "G40",
+ "G65",
+ "G100",
+ "G160",
+ "G250",
+ "G400",
+ "G650",
+ "G1000",
+ "G1600",
+ "G2500",
+ "G4000",
+ "G6500",
+ "G10000",
+ "G12500",
+ "G16000"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Zaehlertyp.json b/unittests/test_data/bo4e_schemas/enum/Zaehlertyp.json
new file mode 100644
index 0000000..6ce713d
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Zaehlertyp.json
@@ -0,0 +1,19 @@
+{
+ "description": "Bei diesem Enum handelt es sich um die Abbildung von Zählertypen der Sparten Strom und Gas.",
+ "title": "Zaehlertyp",
+ "type": "string",
+ "enum": [
+ "DREHSTROMZAEHLER",
+ "BALGENGASZAEHLER",
+ "DREHKOLBENZAEHLER",
+ "LEISTUNGSZAEHLER",
+ "MAXIMUMZAEHLER",
+ "TURBINENRADGASZAEHLER",
+ "ULTRASCHALLGASZAEHLER",
+ "WECHSELSTROMZAEHLER",
+ "MODERNE_MESSEINRICHTUNG",
+ "INTELLIGENTES_MESSSYSTEM",
+ "ELEKTRONISCHER_ZAEHLER",
+ "WIRBELGASZAEHLER"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/ZaehlertypSpezifikation.json b/unittests/test_data/bo4e_schemas/enum/ZaehlertypSpezifikation.json
new file mode 100644
index 0000000..7249f28
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/ZaehlertypSpezifikation.json
@@ -0,0 +1,12 @@
+{
+ "description": "Bei diesem Enum handelt es sich um die Abbildung von besonderen Zählertyp-Spezifikationen der Sparten Strom und Gas.",
+ "title": "ZaehlertypSpezifikation",
+ "type": "string",
+ "enum": [
+ "EDL40",
+ "EDL21",
+ "SONSTIGER_EHZ",
+ "MME_STANDARD",
+ "MME_MEDA"
+ ]
+}
diff --git a/unittests/test_data/bo4e_schemas/enum/Zeiteinheit.json b/unittests/test_data/bo4e_schemas/enum/Zeiteinheit.json
new file mode 100644
index 0000000..a634b56
--- /dev/null
+++ b/unittests/test_data/bo4e_schemas/enum/Zeiteinheit.json
@@ -0,0 +1,17 @@
+{
+ "description": "Auflistung möglicher Einheiten zur Verwendung in zeitbezogenen Angaben.",
+ "title": "Zeiteinheit",
+ "type": "string",
+ "enum": [
+ "SEKUNDE",
+ "MINUTE",
+ "STUNDE",
+ "VIERTEL_STUNDE",
+ "TAG",
+ "WOCHE",
+ "MONAT",
+ "QUARTAL",
+ "HALBJAHR",
+ "JAHR"
+ ]
+}
diff --git a/unittests/test_main.py b/unittests/test_main.py
new file mode 100644
index 0000000..3d9caf3
--- /dev/null
+++ b/unittests/test_main.py
@@ -0,0 +1,37 @@
+from pathlib import Path
+
+from click.testing import CliRunner
+from pydantic import BaseModel
+
+from bo4e_generator.__main__ import main
+from bo4e_generator.parser import generate_bo4e_schema
+from bo4e_generator.schema import get_namespace
+
+OUTPUT_DIR = Path(__file__).parent / "output/bo4e"
+INPUT_DIR = Path(__file__).parent / "test_data/bo4e_schemas"
+
+
+class TestMain:
+ def test_main(self):
+ runner = CliRunner()
+ result = runner.invoke(main, ["--input-dir", str(INPUT_DIR), "--output-dir", str(OUTPUT_DIR)])
+ # generate_bo4e_schemas(input_directory=INPUT_DIR, output_directory=OUTPUT_DIR)
+ assert result.exit_code == 0, f"Error: {result.output}"
+ assert (OUTPUT_DIR / "bo" / "angebot.py").exists()
+ assert (OUTPUT_DIR / "bo" / "preisblatt_netznutzung.py").exists()
+ assert (OUTPUT_DIR / "com" / "com.py").exists()
+ assert (OUTPUT_DIR / "enum" / "typ.py").exists()
+
+ # pylint: disable=import-outside-toplevel, import-error
+ from .output.bo4e.bo.angebot import Angebot # type: ignore[import-not-found]
+
+ assert issubclass(Angebot, BaseModel)
+ assert "typ" in Angebot.model_fields
+
+ def test_single(self):
+ namespace = get_namespace(INPUT_DIR, OUTPUT_DIR)
+ schema_metadata = namespace["Angebot"]
+ result = generate_bo4e_schema(schema_metadata, namespace)
+
+ assert "class Angebot(BaseModel):" in result
+ assert " typ: Annotated[Typ" in result
diff --git a/unittests/test_myclass.py b/unittests/test_myclass.py
deleted file mode 100644
index 768a9e4..0000000
--- a/unittests/test_myclass.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from mypackage.mymodule import MyClass
-
-
-class TestMyClass:
- """
- A class with pytest unit tests.
- """
-
- def test_something(self):
- my_class = MyClass()
- assert my_class.do_something() == "abc"